Repository navigation
Expand file tree
/
Copy pathpathflow.h
More file actions
60 lines (49 loc) · 1.56 KB
/
Copy pathpathflow.h
File metadata and controls
60 lines (49 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef PATHFLOW_H
#define PATHFLOW_H
#include "fpmath.h"
#include <stddef.h>
#define MAX_LINKS 16
typedef struct {
fp_t b; // throughput (pkt/s)
fp_t p; // loss rate
fp_t l; // latency
size_t q; // packets in queue
size_t m; // packets allocated to this link
size_t x; // redundant packets for estimated loss
fp_t t; // estimated transfer time for this link
} path_t;
typedef struct {
fp_t b_ewma;
fp_t l_ewma;
fp_t p_ewma;
size_t q_ewma;
int initialized;
} path_state_t;
void pathflow_update_state(path_state_t *state, fp_t b, fp_t l, fp_t p,
size_t q, fp_t alpha);
typedef enum {
PATHFLOW_SOLVER_GREEDY,
PATHFLOW_SOLVER_DE,
PATHFLOW_SOLVER_SA,
PATHFLOW_SOLVER_PSO,
PATHFLOW_SOLVER_GA,
PATHFLOW_SOLVER_ACO,
PATHFLOW_SOLVER_TS
} pathflow_solver_t;
#ifndef PATHFLOW_ARENA_SIZE
#define PATHFLOW_ARENA_SIZE (16 * (MAX_PACKETS + 1) * 8 + 1048576)
#endif
#include <stdint.h>
typedef struct {
uint8_t memory[PATHFLOW_ARENA_SIZE];
size_t offset;
} pathflow_context_t;
/* Returned when the optimizer rejects invalid input or cannot initialize the
* selected solver. */
#define PATHFLOW_ERROR FP_FROM_INT(-1)
/* N must be in [1, MAX_LINKS], K in [1, MAX_PACKETS], Ps in [0, 100], and
* every path must have positive throughput and non-negative latency. */
fp_t pathflow_optimize(pathflow_context_t *ctx, size_t N, size_t K,
path_t *path, fp_t penalty_weight, size_t Ps,
pathflow_solver_t solver_type);
#endif // PATHFLOW_H