| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *	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 { | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-29 22:55:41 +02:00
										 |  |  | struct kif_state { | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-14 15:37:04 +02:00
										 |  |  | static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return NULL; } | 
					
						
							| 
									
										
										
										
											2013-11-25 01:21:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Kernel routes */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 12:43:46 +02:00
										 |  |  | #define KRT_ALLOW_MERGE_PATHS	1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 14:47:00 +02:00
										 |  |  | #define EA_KRT_PREFSRC		EA_CODE(PROTOCOL_KERNEL, 0x10)
 | 
					
						
							|  |  |  | #define EA_KRT_REALM		EA_CODE(PROTOCOL_KERNEL, 0x11)
 | 
					
						
							|  |  |  | #define EA_KRT_SCOPE		EA_CODE(PROTOCOL_KERNEL, 0x12)
 | 
					
						
							| 
									
										
										
											
												KRT: Add support for plenty of kernel route metrics
Linux kernel route metrics (RTA_METRICS netlink route attribute) are
represented and accessible as new route attributes:
krt_mtu, krt_window, krt_rtt, krt_rttvar, krt_sstresh, krt_cwnd, krt_advmss,
krt_reordering, krt_hoplimit, krt_initcwnd, krt_rto_min, krt_initrwnd,
krt_quickack, krt_lock_mtu, krt_lock_window, krt_lock_rtt, krt_lock_rttvar,
krt_lock_sstresh, krt_lock_cwnd, krt_lock_advmss, krt_lock_reordering,
krt_lock_hoplimit, krt_lock_rto_min, krt_feature_ecn, krt_feature_allfrag
											
										 
											2015-05-12 16:42:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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) | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-05-07 14:47:00 +02:00
										 |  |  | #define EA_KRT_METRICS		EA_CODE(PROTOCOL_KERNEL, 0x20)	/* Dummy one */
 | 
					
						
							|  |  |  | #define EA_KRT_LOCK		EA_CODE(PROTOCOL_KERNEL, 0x21)
 | 
					
						
							|  |  |  | #define EA_KRT_MTU		EA_CODE(PROTOCOL_KERNEL, 0x22)
 | 
					
						
							|  |  |  | #define EA_KRT_WINDOW		EA_CODE(PROTOCOL_KERNEL, 0x23)
 | 
					
						
							|  |  |  | #define EA_KRT_RTT		EA_CODE(PROTOCOL_KERNEL, 0x24)
 | 
					
						
							|  |  |  | #define EA_KRT_RTTVAR		EA_CODE(PROTOCOL_KERNEL, 0x25)
 | 
					
						
							|  |  |  | #define EA_KRT_SSTRESH		EA_CODE(PROTOCOL_KERNEL, 0x26)
 | 
					
						
							|  |  |  | #define EA_KRT_CWND		EA_CODE(PROTOCOL_KERNEL, 0x27)
 | 
					
						
							|  |  |  | #define EA_KRT_ADVMSS		EA_CODE(PROTOCOL_KERNEL, 0x28)
 | 
					
						
							|  |  |  | #define EA_KRT_REORDERING 	EA_CODE(PROTOCOL_KERNEL, 0x29)
 | 
					
						
							|  |  |  | #define EA_KRT_HOPLIMIT		EA_CODE(PROTOCOL_KERNEL, 0x2a)
 | 
					
						
							|  |  |  | #define EA_KRT_INITCWND		EA_CODE(PROTOCOL_KERNEL, 0x2b)
 | 
					
						
							|  |  |  | #define EA_KRT_FEATURES		EA_CODE(PROTOCOL_KERNEL, 0x2c)
 | 
					
						
							|  |  |  | #define EA_KRT_RTO_MIN		EA_CODE(PROTOCOL_KERNEL, 0x2d)
 | 
					
						
							|  |  |  | #define EA_KRT_INITRWND		EA_CODE(PROTOCOL_KERNEL, 0x2e)
 | 
					
						
							|  |  |  | #define EA_KRT_QUICKACK		EA_CODE(PROTOCOL_KERNEL, 0x2f)
 | 
					
						
							| 
									
										
										
											
												KRT: Add support for plenty of kernel route metrics
Linux kernel route metrics (RTA_METRICS netlink route attribute) are
represented and accessible as new route attributes:
krt_mtu, krt_window, krt_rtt, krt_rttvar, krt_sstresh, krt_cwnd, krt_advmss,
krt_reordering, krt_hoplimit, krt_initcwnd, krt_rto_min, krt_initrwnd,
krt_quickack, krt_lock_mtu, krt_lock_window, krt_lock_rtt, krt_lock_rttvar,
krt_lock_sstresh, krt_lock_cwnd, krt_lock_advmss, krt_lock_reordering,
krt_lock_hoplimit, krt_lock_rto_min, krt_feature_ecn, krt_feature_allfrag
											
										 
											2015-05-12 16:42:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | struct krt_params { | 
					
						
							| 
									
										
										
										
											2015-11-03 14:42:41 +01:00
										 |  |  |   u32 table_id;				/* Kernel table ID we sync with */ | 
					
						
							| 
									
										
										
										
											2016-09-15 14:59:06 +02:00
										 |  |  |   u32 metric;				/* Kernel metric used for all routes */ | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-29 22:55:41 +02:00
										 |  |  | struct krt_state { | 
					
						
							| 
									
										
										
										
											2015-11-03 14:42:41 +01:00
										 |  |  |   struct krt_proto *hash_next; | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void krt_sys_init(struct krt_proto *p UNUSED) { } | 
					
						
							| 
									
										
										
										
											2015-11-03 14:42:41 +01:00
										 |  |  | static inline void krt_sys_preconfig(struct config *c UNUSED) { } | 
					
						
							|  |  |  | static inline void krt_sys_postconfig(struct krt_config *x UNUSED) { } | 
					
						
							| 
									
										
										
										
											2012-05-04 16:38:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |