Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iproute2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
iproute2
Commits
2d596120
Commit
2d596120
authored
Oct 09, 2012
by
Stephen Hemminger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vxlan: add support for port range
parent
ea63a69b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
16 deletions
+41
-16
include/linux/if_link.h
include/linux/if_link.h
+6
-0
ip/iplink_vxlan.c
ip/iplink_vxlan.c
+35
-16
No files found.
include/linux/if_link.h
View file @
2d596120
...
@@ -282,10 +282,16 @@ enum {
...
@@ -282,10 +282,16 @@ enum {
IFLA_VXLAN_LEARNING
,
IFLA_VXLAN_LEARNING
,
IFLA_VXLAN_AGEING
,
IFLA_VXLAN_AGEING
,
IFLA_VXLAN_LIMIT
,
IFLA_VXLAN_LIMIT
,
IFLA_VXLAN_PORT_RANGE
,
__IFLA_VXLAN_MAX
__IFLA_VXLAN_MAX
};
};
#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
struct
ifla_vxlan_port_range
{
__be16
low
;
__be16
high
;
};
/* SR-IOV virtual function management section */
/* SR-IOV virtual function management section */
enum
{
enum
{
...
...
ip/iplink_vxlan.c
View file @
2d596120
...
@@ -24,7 +24,8 @@
...
@@ -24,7 +24,8 @@
static
void
explain
(
void
)
static
void
explain
(
void
)
{
{
fprintf
(
stderr
,
"Usage: ... vxlan id VNI [ group ADDR ] [ local ADDR ]
\n
"
);
fprintf
(
stderr
,
"Usage: ... vxlan id VNI [ group ADDR ] [ local ADDR ]
\n
"
);
fprintf
(
stderr
,
" [ ttl TTL ] [ tos TOS ] [ [no]learning ] [ dev PHYS_DEV ]
\n
"
);
fprintf
(
stderr
,
" [ ttl TTL ] [ tos TOS ] [ dev PHYS_DEV ]
\n
"
);
fprintf
(
stderr
,
" [ port MIN MAX ] [ [no]learning ]
\n
"
);
fprintf
(
stderr
,
"
\n
"
);
fprintf
(
stderr
,
"
\n
"
);
fprintf
(
stderr
,
"Where: VNI := 0-16777215
\n
"
);
fprintf
(
stderr
,
"Where: VNI := 0-16777215
\n
"
);
fprintf
(
stderr
,
" ADDR := { IP_ADDRESS | any }
\n
"
);
fprintf
(
stderr
,
" ADDR := { IP_ADDRESS | any }
\n
"
);
...
@@ -46,6 +47,7 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
...
@@ -46,6 +47,7 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
__u8
noage
=
0
;
__u8
noage
=
0
;
__u32
age
=
0
;
__u32
age
=
0
;
__u32
maxaddr
=
0
;
__u32
maxaddr
=
0
;
struct
ifla_vxlan_port_range
range
=
{
0
,
0
};
while
(
argc
>
0
)
{
while
(
argc
>
0
)
{
if
(
!
matches
(
*
argv
,
"id"
)
||
if
(
!
matches
(
*
argv
,
"id"
)
||
...
@@ -79,9 +81,9 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
...
@@ -79,9 +81,9 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
NEXT_ARG
();
NEXT_ARG
();
if
(
strcmp
(
*
argv
,
"inherit"
)
!=
0
)
{
if
(
strcmp
(
*
argv
,
"inherit"
)
!=
0
)
{
if
(
get_unsigned
(
&
uval
,
*
argv
,
0
))
if
(
get_unsigned
(
&
uval
,
*
argv
,
0
))
invarg
(
"invalid TTL
\n
"
,
*
argv
);
invarg
(
"invalid TTL"
,
*
argv
);
if
(
uval
>
255
)
if
(
uval
>
255
)
invarg
(
"TTL must be <= 255
\n
"
,
*
argv
);
invarg
(
"TTL must be <= 255"
,
*
argv
);
ttl
=
uval
;
ttl
=
uval
;
}
}
}
else
if
(
!
matches
(
*
argv
,
"tos"
)
||
}
else
if
(
!
matches
(
*
argv
,
"tos"
)
||
...
@@ -100,13 +102,23 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
...
@@ -100,13 +102,23 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
if
(
strcmp
(
*
argv
,
"none"
)
==
0
)
if
(
strcmp
(
*
argv
,
"none"
)
==
0
)
noage
=
1
;
noage
=
1
;
else
if
(
get_u32
(
&
age
,
*
argv
,
0
))
else
if
(
get_u32
(
&
age
,
*
argv
,
0
))
invarg
(
"ageing timer
\n
"
,
*
argv
);
invarg
(
"ageing timer"
,
*
argv
);
}
else
if
(
!
matches
(
*
argv
,
"maxaddress"
))
{
}
else
if
(
!
matches
(
*
argv
,
"maxaddress"
))
{
NEXT_ARG
();
NEXT_ARG
();
if
(
strcmp
(
*
argv
,
"unlimited"
)
==
0
)
if
(
strcmp
(
*
argv
,
"unlimited"
)
==
0
)
maxaddr
=
0
;
maxaddr
=
0
;
else
if
(
get_u32
(
&
maxaddr
,
*
argv
,
0
))
else
if
(
get_u32
(
&
maxaddr
,
*
argv
,
0
))
invarg
(
"max addresses
\n
"
,
*
argv
);
invarg
(
"max addresses"
,
*
argv
);
}
else
if
(
!
matches
(
*
argv
,
"port"
))
{
__u16
minport
,
maxport
;
NEXT_ARG
();
if
(
get_u16
(
&
minport
,
*
argv
,
0
))
invarg
(
"min port"
,
*
argv
);
NEXT_ARG
();
if
(
get_u16
(
&
maxport
,
*
argv
,
0
))
invarg
(
"max port"
,
*
argv
);
range
.
low
=
htons
(
minport
);
range
.
high
=
htons
(
maxport
);
}
else
if
(
!
matches
(
*
argv
,
"nolearning"
))
{
}
else
if
(
!
matches
(
*
argv
,
"nolearning"
))
{
learning
=
0
;
learning
=
0
;
}
else
if
(
!
matches
(
*
argv
,
"learning"
))
{
}
else
if
(
!
matches
(
*
argv
,
"learning"
))
{
...
@@ -140,6 +152,9 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
...
@@ -140,6 +152,9 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
addattr32
(
n
,
1024
,
IFLA_VXLAN_AGEING
,
age
);
addattr32
(
n
,
1024
,
IFLA_VXLAN_AGEING
,
age
);
if
(
maxaddr
)
if
(
maxaddr
)
addattr32
(
n
,
1024
,
IFLA_VXLAN_LIMIT
,
maxaddr
);
addattr32
(
n
,
1024
,
IFLA_VXLAN_LIMIT
,
maxaddr
);
if
(
range
.
low
||
range
.
high
)
addattr_l
(
n
,
1024
,
IFLA_VXLAN_PORT_RANGE
,
&
range
,
sizeof
(
range
));
return
0
;
return
0
;
}
}
...
@@ -148,6 +163,8 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -148,6 +163,8 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
{
__u32
vni
;
__u32
vni
;
unsigned
link
;
unsigned
link
;
__u8
tos
;
__u32
maxaddr
;
char
s1
[
1024
];
char
s1
[
1024
];
char
s2
[
64
];
char
s2
[
64
];
...
@@ -187,13 +204,18 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -187,13 +204,18 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
fprintf
(
f
,
"dev %u "
,
link
);
fprintf
(
f
,
"dev %u "
,
link
);
}
}
if
(
tb
[
IFLA_VXLAN_PORT_RANGE
])
{
const
struct
ifla_vxlan_port_range
*
r
=
RTA_DATA
(
tb
[
IFLA_VXLAN_PORT_RANGE
]);
fprintf
(
f
,
"port %u %u "
,
ntohs
(
r
->
low
),
ntohs
(
r
->
high
));
}
if
(
tb
[
IFLA_VXLAN_LEARNING
]
&&
if
(
tb
[
IFLA_VXLAN_LEARNING
]
&&
!
rta_getattr_u8
(
tb
[
IFLA_VXLAN_LEARNING
]))
!
rta_getattr_u8
(
tb
[
IFLA_VXLAN_LEARNING
]))
fputs
(
"nolearning "
,
f
);
fputs
(
"nolearning "
,
f
);
if
(
tb
[
IFLA_VXLAN_TOS
])
{
if
(
tb
[
IFLA_VXLAN_TOS
]
&&
__u8
tos
=
rta_getattr_u8
(
tb
[
IFLA_VXLAN_TOS
]);
(
tos
=
rta_getattr_u8
(
tb
[
IFLA_VXLAN_TOS
])))
{
if
(
tos
==
1
)
if
(
tos
==
1
)
fprintf
(
f
,
"tos inherit "
);
fprintf
(
f
,
"tos inherit "
);
else
else
...
@@ -213,13 +235,10 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -213,13 +235,10 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
else
else
fprintf
(
f
,
"ageing %u "
,
age
);
fprintf
(
f
,
"ageing %u "
,
age
);
}
}
if
(
tb
[
IFLA_VXLAN_LIMIT
])
{
__u32
maxaddr
=
rta_getattr_u32
(
tb
[
IFLA_VXLAN_LIMIT
]);
if
(
tb
[
IFLA_VXLAN_LIMIT
]
&&
if
(
maxaddr
==
0
)
(
maxaddr
=
rta_getattr_u32
(
tb
[
IFLA_VXLAN_LIMIT
])
!=
0
))
fprintf
(
f
,
"maxaddr unlimited "
);
fprintf
(
f
,
"maxaddr %u "
,
maxaddr
);
else
fprintf
(
f
,
"maxaddr %u "
,
maxaddr
);
}
}
}
struct
link_util
vxlan_link_util
=
{
struct
link_util
vxlan_link_util
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment