krt-sys.h 3.55 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 *	BIRD -- Linux Kernel Netlink Route Syncer
 *
 *	(c) 1998--2000 Martin Mares <mj@ucw.cz>
 *
 *	Can be freely distributed and used under the terms of the GNU GPL.
 */

#ifndef _BIRD_KRT_SYS_H_
#define _BIRD_KRT_SYS_H_


/* Kernel interfaces */

struct kif_params {
};

18
struct kif_state {
19 20 21 22 23 24 25 26 27 28 29
};


static inline void kif_sys_init(struct kif_proto *p UNUSED) { }
static inline int kif_sys_reconfigure(struct kif_proto *p UNUSED, struct kif_config *n UNUSED, struct kif_config *o UNUSED) { return 1; }

static inline void kif_sys_preconfig(struct config *c UNUSED) { }
static inline void kif_sys_postconfig(struct kif_config *c UNUSED) { }
static inline void kif_sys_init_config(struct kif_config *c UNUSED) { }
static inline void kif_sys_copy_config(struct kif_config *d UNUSED, struct kif_config *s UNUSED) { }

30
static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return NULL; }
31

32 33 34

/* Kernel routes */

35 36
#define KRT_ALLOW_MERGE_PATHS	1

37 38
#define EA_KRT_PREFSRC		EA_CODE(EAP_KRT, 0x10)
#define EA_KRT_REALM		EA_CODE(EAP_KRT, 0x11)
39
#define EA_KRT_SCOPE		EA_CODE(EAP_KRT, 0x12)
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89


#define KRT_METRICS_MAX		0x10	/* RTAX_QUICKACK+1 */
#define KRT_METRICS_OFFSET	0x20	/* Offset of EA_KRT_* vs RTAX_* */

#define KRT_FEATURES_MAX	4

/*
 * Following attributes are parts of RTA_METRICS kernel route attribute, their
 * ids must be consistent with their RTAX_* constants (+ KRT_METRICS_OFFSET)
 */
#define EA_KRT_METRICS		EA_CODE(EAP_KRT, 0x20)	/* Dummy one */
#define EA_KRT_LOCK		EA_CODE(EAP_KRT, 0x21)
#define EA_KRT_MTU		EA_CODE(EAP_KRT, 0x22)
#define EA_KRT_WINDOW		EA_CODE(EAP_KRT, 0x23)
#define EA_KRT_RTT		EA_CODE(EAP_KRT, 0x24)
#define EA_KRT_RTTVAR		EA_CODE(EAP_KRT, 0x25)
#define EA_KRT_SSTRESH		EA_CODE(EAP_KRT, 0x26)
#define EA_KRT_CWND		EA_CODE(EAP_KRT, 0x27)
#define EA_KRT_ADVMSS		EA_CODE(EAP_KRT, 0x28)
#define EA_KRT_REORDERING 	EA_CODE(EAP_KRT, 0x29)
#define EA_KRT_HOPLIMIT		EA_CODE(EAP_KRT, 0x2a)
#define EA_KRT_INITCWND		EA_CODE(EAP_KRT, 0x2b)
#define EA_KRT_FEATURES		EA_CODE(EAP_KRT, 0x2c)
#define EA_KRT_RTO_MIN		EA_CODE(EAP_KRT, 0x2d)
#define EA_KRT_INITRWND		EA_CODE(EAP_KRT, 0x2e)
#define EA_KRT_QUICKACK		EA_CODE(EAP_KRT, 0x2f)

/* Bits of EA_KRT_LOCK, also based on RTAX_* constants */
#define EA_KRT_LOCK_MTU		EA_KRT_LOCK | EA_BIT(0x2)
#define EA_KRT_LOCK_WINDOW	EA_KRT_LOCK | EA_BIT(0x3)
#define EA_KRT_LOCK_RTT		EA_KRT_LOCK | EA_BIT(0x4)
#define EA_KRT_LOCK_RTTVAR	EA_KRT_LOCK | EA_BIT(0x5)
#define EA_KRT_LOCK_SSTHRESH	EA_KRT_LOCK | EA_BIT(0x6)
#define EA_KRT_LOCK_CWND	EA_KRT_LOCK | EA_BIT(0x7)
#define EA_KRT_LOCK_ADVMSS	EA_KRT_LOCK | EA_BIT(0x8)
#define EA_KRT_LOCK_REORDERING 	EA_KRT_LOCK | EA_BIT(0x9)
#define EA_KRT_LOCK_HOPLIMIT	EA_KRT_LOCK | EA_BIT(0xa)
// define EA_KRT_LOCK_INITCWND	EA_KRT_LOCK | EA_BIT(0xb)
// define EA_KRT_LOCK_FEATURES	EA_KRT_LOCK | EA_BIT(0xc)
#define EA_KRT_LOCK_RTO_MIN	EA_KRT_LOCK | EA_BIT(0xd)
// define EA_KRT_LOCK_INITRWND	EA_KRT_LOCK | EA_BIT(0xe)

/* Bits of EA_KRT_FEATURES, based on RTAX_FEATURE_* constants */
#define EA_KRT_FEATURE_ECN	EA_KRT_FEATURES | EA_BIT(0x0)
// define EA_KRT_FEATURE_SACK	EA_KRT_FEATURES | EA_BIT(0x1)
// define EA_KRT_FEATURE_TSTAMP	EA_KRT_FEATURES | EA_BIT(0x2)
#define EA_KRT_FEATURE_ALLFRAG	EA_KRT_FEATURES | EA_BIT(0x3)


90
struct krt_params {
91
  u32 table_id;				/* Kernel table ID we sync with */
92
  u32 metric;				/* Kernel metric used for all routes */
93 94
};

95
struct krt_state {
96
  struct krt_proto *hash_next;
97 98 99 100
};


static inline void krt_sys_init(struct krt_proto *p UNUSED) { }
101 102
static inline void krt_sys_preconfig(struct config *c UNUSED) { }
static inline void krt_sys_postconfig(struct krt_config *x UNUSED) { }
103 104 105


#endif