linux/include/uapi/linux/seg6_iptunnel.h
<<
>>
Prefs
   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
  20enum {
  21        SEG6_IPTUNNEL_UNSPEC,
  22        SEG6_IPTUNNEL_SRH,
  23        __SEG6_IPTUNNEL_MAX,
  24};
  25#define SEG6_IPTUNNEL_MAX (__SEG6_IPTUNNEL_MAX - 1)
  26
  27struct 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
  34enum {
  35        SEG6_IPTUN_MODE_INLINE,
  36        SEG6_IPTUN_MODE_ENCAP,
  37        SEG6_IPTUN_MODE_L2ENCAP,
  38};
  39
  40#ifdef __KERNEL__
  41
  42static 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
  62