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