| 1 | /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ | 
|---|
| 2 | /* | 
|---|
| 3 | *  SR-IPv6 implementation | 
|---|
| 4 | * | 
|---|
| 5 | *  Author: | 
|---|
| 6 | *  David Lebrun <david.lebrun@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[]; | 
|---|
| 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 |  | 
|---|