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