LCOV - code coverage report
Current view: top level - plugins/vxlan - vxlan_packet.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 8 8 100.0 %
Date: 2023-10-26 01:39:38 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2015 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : #ifndef __included_vxlan_packet_h__
      16             : #define __included_vxlan_packet_h__ 1
      17             : 
      18             : /*
      19             :  * From RFC-7348
      20             :  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      21             :  * |R|R|R|R|I|R|R|R|            Reserved                           |
      22             :  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      23             :  * |                VXLAN Network Identifier (VNI) |   Reserved    |
      24             :  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      25             :  *
      26             :  * VXLAN Header:  This is an 8-byte field that has:
      27             :  *
      28             :  * - Flags (8 bits): where the I flag MUST be set to 1 for a valid
      29             :  * VXLAN Network ID (VNI).  The other 7 bits (designated "R") are
      30             :  * reserved fields and MUST be set to zero on transmission and
      31             :  * ignored on receipt.
      32             :  *
      33             :  * - VXLAN Segment ID/VXLAN Network Identifier (VNI): this is a
      34             :  * 24-bit value used to designate the individual VXLAN overlay
      35             :  * network on which the communicating VMs are situated.  VMs in
      36             :  * different VXLAN overlay networks cannot communicate with each
      37             :  * other.
      38             :  *
      39             :  * - Reserved fields (24 bits and 8 bits): MUST be set to zero on
      40             :  * transmission and ignored on receipt.
      41             :  *
      42             :  */
      43             : 
      44             : typedef struct
      45             : {
      46             :   u8 flags;
      47             :   u8 res1;
      48             :   u8 res2;
      49             :   u8 res3;
      50             :   u32 vni_reserved;
      51             : } vxlan_header_t;
      52             : 
      53             : #define VXLAN_FLAGS_I 0x08
      54             : 
      55             : static inline u32
      56          84 : vnet_get_vni (vxlan_header_t * h)
      57             : {
      58             :   u32 vni_reserved_host_byte_order;
      59             : 
      60          84 :   vni_reserved_host_byte_order = clib_net_to_host_u32 (h->vni_reserved);
      61          84 :   return vni_reserved_host_byte_order >> 8;
      62             : }
      63             : 
      64             : static inline void
      65        2920 : vnet_set_vni_and_flags (vxlan_header_t * h, u32 vni)
      66             : {
      67        2920 :   h->vni_reserved = clib_host_to_net_u32 (vni << 8);
      68        2920 :   *(u32 *) h = 0;
      69        2920 :   h->flags = VXLAN_FLAGS_I;
      70        2920 : }
      71             : 
      72             : #endif /* __included_vxlan_packet_h__ */
      73             : 
      74             : /*
      75             :  * fd.io coding-style-patch-verification: ON
      76             :  *
      77             :  * Local Variables:
      78             :  * eval: (c-set-style "gnu")
      79             :  * End:
      80             :  */

Generated by: LCOV version 1.14