VXLAN(4P) Protocols VXLAN(4P)

NAME


VXLAN, vxlan - Virtual eXtensible Local Area Network

SYNOPSIS


#include <sys/vxlan.h>

DESCRIPTION


VXLAN (RFC 7348) is a network encapsulation protocol that is used by
overlay(7) devices. A payload, commonly an Ethernet frame, is placed
inside of a UDP packet and prepended with an 8-byte VXLAN header.

The VXLAN header contains two 32-bit words. The first word is an 8-bit
flags field followed by 24 reserved bits. The second word is a 24-bit
virtual network identifier followed by 8 reserved bits. The virtual
network identifier identifies a unique VXLAN and is similar in concept to
an IEEE 802.1Q VLAN identifier.

The system provides access to VXLAN through dladm overlays. See dladm(8)
and overlay(7) for more information.

The <sys/vxlan.h> header provides information for working with the VXLAN
protocol. The contents of this header are uncommitted. The header defines
a structure that may be used to encode and decode a VXLAN header. It
defines a packed structure type vxlan_hdr_t which represents the VXLAN
frame header and has the following members:

uint32_t vxlan_flags; /* flags in upper 8 bits */
uint32_t vxlan_id; /* VXLAN ID in upper 24 bits */

EXAMPLES


Example 1 Decoding a VXLAN header

The following example shows how to validate a header. For more information
on this process, see RFC 7348.

#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
#include <sys/vxlan.h>

...

/*
* Validate the following bytes as a VXLAN header. If valid, return
* 0 and store the VXLAN identifier in *vidp. Otherwise, return an
* error.
*/
int
validate_vxlan(void *buf, int len, uint32_t *vidp)
{
vxlan_hdr_t *hdr;

if (len < sizeof (vxlan_hdr_t))
return (EINVAL);

hdr = buf;

/*
* This verifies that the required flag is set; however, it does
* not look at any of the other bist that are reserved in the
* header. Software needs to evaluate how it should handle other
* bits being set in the vxlan_flags member.
*/
if ((ntohl(hdr->vxlan_flags) & VXLAN_F_VDI) == 0)
return (EINVAL);

*vidp = ntohl(vxlan->vxlan_id) >> VXLAN_ID_SHIFT;

return (0);
}

STABILITY


The contents of <sys/vxlan.h> are Uncommitted.

SEE ALSO


overlay(7), dladm(8)

Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger L., Sridhar, T.,
Bursell, M., and C. Wright, RFC 7348, Virtual eXtensible Local Area Network
(VXLAN): A Framework, for Overlaying Virtualized Layer 2 Networks over
Layer 3 Networks, August 2014.

illumos December 20, 2018 illumos