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