1 /* 2 * SR-IPv6 implementation 3 * 4 * Author: 5 * David Lebrun <[email protected]> 6 * 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 */ 13 14 #ifndef _UAPI_LINUX_SEG6_H 15 #define _UAPI_LINUX_SEG6_H 16 17 #include <linux/types.h> 18 19 /* 20 * SRH 21 */ 22 struct ipv6_sr_hdr { 23 __u8 nexthdr; 24 __u8 hdrlen; 25 __u8 type; 26 __u8 segments_left; 27 __u8 first_segment; 28 __u8 flag_1; 29 __u8 flag_2; 30 __u8 reserved; 31 32 struct in6_addr segments[0]; 33 }; 34 35 #define SR6_FLAG1_CLEANUP (1 << 7) 36 #define SR6_FLAG1_PROTECTED (1 << 6) 37 #define SR6_FLAG1_OAM (1 << 5) 38 #define SR6_FLAG1_ALERT (1 << 4) 39 #define SR6_FLAG1_HMAC (1 << 3) 40 41 #define SR6_TLV_INGRESS 1 42 #define SR6_TLV_EGRESS 2 43 #define SR6_TLV_OPAQUE 3 44 #define SR6_TLV_PADDING 4 45 #define SR6_TLV_HMAC 5 46 47 #define sr_has_cleanup(srh) ((srh)->flag_1 & SR6_FLAG1_CLEANUP) 48 #define sr_has_hmac(srh) ((srh)->flag_1 & SR6_FLAG1_HMAC) 49 50 struct sr6_tlv { 51 __u8 type; 52 __u8 len; 53 __u8 data[0]; 54 }; 55 56 #endif 57