erspan: Add type I version 0 support.

The Type I ERSPAN frame format is based on the barebones
IP + GRE(4-byte) encapsulation on top of the raw mirrored frame.
Both type I and II use 0x88BE as protocol type. Unlike type II
and III, no sequence number or key is required.

To creat a type I erspan tunnel device:
$ ip link add dev erspan11 type erspan \
	local 172.16.1.100 remote 172.16.1.200 \
	erspan_ver 0

CC: Dmitriy Andreyevskiy <dandreye@cisco.com>
Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
William Tu 2020-04-26 08:04:15 -07:00 committed by David Ahern
parent 0c42c6b130
commit 846b6b2da8
3 changed files with 7 additions and 7 deletions

View File

@ -354,8 +354,8 @@ get_failed:
NEXT_ARG(); NEXT_ARG();
if (get_u8(&erspan_ver, *argv, 0)) if (get_u8(&erspan_ver, *argv, 0))
invarg("invalid erspan version\n", *argv); invarg("invalid erspan version\n", *argv);
if (erspan_ver != 1 && erspan_ver != 2) if (erspan_ver > 2)
invarg("erspan version must be 1 or 2\n", *argv); invarg("erspan version must be 0/1/2\n", *argv);
} else if (is_erspan && strcmp(*argv, "erspan_dir") == 0) { } else if (is_erspan && strcmp(*argv, "erspan_dir") == 0) {
NEXT_ARG(); NEXT_ARG();
if (matches(*argv, "ingress") == 0) if (matches(*argv, "ingress") == 0)

View File

@ -389,8 +389,8 @@ get_failed:
NEXT_ARG(); NEXT_ARG();
if (get_u8(&erspan_ver, *argv, 0)) if (get_u8(&erspan_ver, *argv, 0))
invarg("invalid erspan version\n", *argv); invarg("invalid erspan version\n", *argv);
if (erspan_ver != 1 && erspan_ver != 2) if (erspan_ver > 2)
invarg("erspan version must be 1 or 2\n", *argv); invarg("erspan version must be 0/1/2\n", *argv);
} else if (strcmp(*argv, "erspan_dir") == 0) { } else if (strcmp(*argv, "erspan_dir") == 0) {
NEXT_ARG(); NEXT_ARG();
if (matches(*argv, "ingress") == 0) if (matches(*argv, "ingress") == 0)
@ -430,7 +430,7 @@ get_failed:
addattr_l(n, 1024, IFLA_GRE_FLOWINFO, &flowinfo, 4); addattr_l(n, 1024, IFLA_GRE_FLOWINFO, &flowinfo, 4);
addattr32(n, 1024, IFLA_GRE_FLAGS, flags); addattr32(n, 1024, IFLA_GRE_FLAGS, flags);
addattr32(n, 1024, IFLA_GRE_FWMARK, fwmark); addattr32(n, 1024, IFLA_GRE_FWMARK, fwmark);
if (erspan_ver) { if (erspan_ver <= 2) {
addattr8(n, 1024, IFLA_GRE_ERSPAN_VER, erspan_ver); addattr8(n, 1024, IFLA_GRE_ERSPAN_VER, erspan_ver);
if (erspan_ver == 1 && erspan_idx != 0) { if (erspan_ver == 1 && erspan_idx != 0) {
addattr32(n, 1024, IFLA_GRE_ERSPAN_INDEX, erspan_idx); addattr32(n, 1024, IFLA_GRE_ERSPAN_INDEX, erspan_idx);

View File

@ -1163,8 +1163,8 @@ It must be an address on another interface on this host.
.BR erspan_ver " \fIversion " .BR erspan_ver " \fIversion "
- specifies the ERSPAN version number. - specifies the ERSPAN version number.
.IR version .IR version
indicates the ERSPAN version to be created: 1 for version 1 (type II) indicates the ERSPAN version to be created: 0 for version 0 type I,
or 2 for version 2 (type III). 1 for version 1 (type II) or 2 for version 2 (type III).
.sp .sp
.BR erspan " \fIIDX " .BR erspan " \fIIDX "