summaryrefslogtreecommitdiffstats
path: root/src/vnet/CMakeLists.txt
AgeCommit message (Expand)AuthorFilesLines
2021-11-23misc: deprecate gbp and its dependentsNeale Ranns1-24/+0
2021-11-02interface: avoid dependency on crc32 for eth handoffFlorin Coras1-1/+1
2021-10-31interface: handoff refactor and optimizationsFlorin Coras1-1/+1
2021-10-30build: add missing fib headers in packagesBenoƮt Ganne1-0/+3
2021-10-22ipsec: add api test fileFilip Tehlar1-0/+1
2021-10-21l2: add api test fileFilip Tehlar1-0/+1
2021-10-21session: add api test fileFilip Tehlar1-0/+1
2021-10-18interface: add api test fileFilip Tehlar1-0/+1
2021-10-01devices: add
#ifndef included_vnet_sr_packet_h
#define included_vnet_sr_packet_h

#include <vnet/ip/ip.h>

/*
 * ipv6 segment-routing header format
 *
 * Copyright (c) 2013 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 *   The Segment Routing Header (SRH) is defined as follows:
 *
 *    0                   1                   2                   3
 *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   | Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   | First Segment |     Flags     |           RESERVED            |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |            Segment List[0] (128 bits IPv6 address)            |
 *   |                                                               |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |                                                               |
 *                                 ...
 *   |                                                               |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |            Segment List[n] (128 bits IPv6 address)            |
 *   |                                                               |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   //                                                             //
 *   //         Optional Type Length Value objects (variable)       //
 *   //                                                             //
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *
 *   where:
 *
 *   o  Next Header: 8-bit selector.  Identifies the type of header
 *      immediately following the SRH.
 *
 *   o  Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH
 *      header in 8-octet units, not including the first 8 octets.
 *
 *   o  Routing Type: TBD, to be assigned by IANA (suggested value: 4).
 *
 *   o  Segments Left.  Defined in [RFC2460], it contains the index, in
 *      the Segment List, of the next segment to inspect.  Segments Left
 *      is decremented at each segment.
 *
 *   o  First Segment: contains the index, in the Segment List, of the
 *      first segment of the path which is in fact the last element of the
 *      Segment List.
 *
 *   o  Flags: 8 bits of flags.  Following flags are defined:
 *
 *         0 1 2 3 4 5 6 7
 *        +-+-+-+-+-+-+-+-+
 *        |U|P|O|A|H|  U  |
 *        +-+-+-+-+-+-+-+-+
 *
 *        U: Unused and for future use.  SHOULD be unset on transmission
 *        and MUST be ignored on receipt.
 *
 *        P-flag: Protected flag.  Set when the packet has been rerouted
 *        through FRR mechanism by an SR endpoint node.
 *
 *        O-flag: OAM flag.  When set, it indicates that this packet is
 *        an operations and management (OAM) packet.
 *
 *        A-flag: Alert flag.  If present, it means important Type Length
 *        Value (TLV) objects are present.  See Section 3.1 for details
 *        on TLVs objects.
 *
 *        H-flag: HMAC flag.  If set, the HMAC TLV is present and is
 *        encoded as the last TLV of the SRH.  In other words, the last
 *        36 octets of the SRH represent the HMAC information.  See
 *        Section 3.1.5 for details on the HMAC TLV.
 *
 *   o  RESERVED: SHOULD be unset on transmission and MUST be ignored on
 *      receipt.
 *
 *   o  Segment List[n]: 128 bit IPv6 addresses representing the nth
 *      segment in the Segment List.  The Segment List is encoded starting
 *      from the last segment of the path.  I.e., the first element of the
 *      segment list (Segment List [0]) contains the last segment of the
 *      path while the last segment of the Segment List (Segment List[n])
 *      contains the first segment of the path.  The index contained in
 *      "Segments Left" identifies the current active segment.
 *
 *   o  Type Length Value (TLV) are described in Section 3.1.
 *
 */

#ifndef IPPROTO_IPV6_ROUTE
#define IPPROTO_IPV6_ROUTE        43
#endif

#define ROUTING_HEADER_TYPE_SR    4

typedef struct
{
  /* Protocol for next header. */
  u8 protocol;
  /*
   * Length of routing header in 8 octet units,
   * not including the first 8 octets
   */
  u8 length;

  /* Type of routing header; type 4 = segement routing */
  u8 type;

  /* Next segment in the segment list */
  u8 segments_left;

  /* Pointer to the first segment in the header */
  u8 first_segment;

  /* Flag bits */
#define IP6_SR_HEADER_FLAG_PROTECTED  (0x40)
#define IP6_SR_HEADER_FLAG_OAM        (0x20)
#define IP6_SR_HEADER_FLAG_ALERT      (0x10)
#define IP6_SR_HEADER_FLAG_HMAC       (0x80)

  /* values 0x0, 0x4 - 0x7 are reserved */
  u8 flags;
  u16 reserved;

  /* The segment elts */
  ip6_address_t segments[0];
} __attribute__ ((packed)) ip6_sr_header_t;

/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/

#endif /* included_vnet_sr_packet_h */
s='insertions'>+0
2020-09-04virtio: remove kernel virtio header dependenciesMohsin Kazmi1-1/+5
2020-09-03crypto: Add async crypto APIsNathan Skrzypczak1-0/+3
2020-08-25flow: add vnet/flow formal APIChenmin Sun1-0/+3
2020-08-20virtio: add modern device supportMohsin Kazmi1-0/+2
2020-08-20virtio: refactor pci device codeMohsin Kazmi1-0/+2
2020-08-14gso: packet coalesce libraryMohsin Kazmi1-0/+2
2020-08-14ip: add VNET_IP_TABLE_ADD_DEL_FUNCTIONSteven Luong1-0/+1
2020-07-21ipsec: Dedicated IPSec interface typeNeale Ranns1-0/+1
2020-07-16adl: move allow/deny list function to pluginDave Barach1-16/+3
2020-05-04fib: midchain adjacency optimisationsNeale Ranns1-0/+1
2020-04-30crypto: introduce async crypto infraFan Zhang1-0/+3