root/include/uapi/linux/seg6_iptunnel.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. seg6_lwt_headroom

   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_IPTUNNEL_H
  16 #define _UAPI_LINUX_SEG6_IPTUNNEL_H
  17 
  18 #include <linux/seg6.h>         /* For struct ipv6_sr_hdr. */
  19 
  20 enum {
  21         SEG6_IPTUNNEL_UNSPEC,
  22         SEG6_IPTUNNEL_SRH,
  23         __SEG6_IPTUNNEL_MAX,
  24 };
  25 #define SEG6_IPTUNNEL_MAX (__SEG6_IPTUNNEL_MAX - 1)
  26 
  27 struct seg6_iptunnel_encap {
  28         int mode;
  29         struct ipv6_sr_hdr srh[0];
  30 };
  31 
  32 #define SEG6_IPTUN_ENCAP_SIZE(x) ((sizeof(*x)) + (((x)->srh->hdrlen + 1) << 3))
  33 
  34 enum {
  35         SEG6_IPTUN_MODE_INLINE,
  36         SEG6_IPTUN_MODE_ENCAP,
  37         SEG6_IPTUN_MODE_L2ENCAP,
  38 };
  39 
  40 #ifdef __KERNEL__
  41 
  42 static inline size_t seg6_lwt_headroom(struct seg6_iptunnel_encap *tuninfo)
  43 {
  44         int head = 0;
  45 
  46         switch (tuninfo->mode) {
  47         case SEG6_IPTUN_MODE_INLINE:
  48                 break;
  49         case SEG6_IPTUN_MODE_ENCAP:
  50                 head = sizeof(struct ipv6hdr);
  51                 break;
  52         case SEG6_IPTUN_MODE_L2ENCAP:
  53                 return 0;
  54         }
  55 
  56         return ((tuninfo->srh->hdrlen + 1) << 3) + head;
  57 }
  58 
  59 #endif
  60 
  61 #endif

/* [<][>][^][v][top][bottom][index][help] */