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
7fd86a96
Commit
7fd86a96
authored
May 13, 2016
by
Stephen Hemminger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into net-next
parents
b76b93dd
719c443b
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
921 additions
and
1170 deletions
+921
-1170
Makefile
Makefile
+3
-0
bash-completion/tc
bash-completion/tc
+723
-0
devlink/devlink.c
devlink/devlink.c
+96
-1088
include/linux/devlink.h
include/linux/devlink.h
+0
-63
include/linux/if.h
include/linux/if.h
+28
-0
include/linux/libc-compat.h
include/linux/libc-compat.h
+44
-0
include/linux/netfilter_ipv4/ip_tables.h
include/linux/netfilter_ipv4/ip_tables.h
+1
-0
ip/iplink_geneve.c
ip/iplink_geneve.c
+1
-1
ip/link_gre.c
ip/link_gre.c
+25
-18
No files found.
Makefile
View file @
7fd86a96
...
@@ -7,6 +7,7 @@ DOCDIR?=$(DATADIR)/doc/iproute2
...
@@ -7,6 +7,7 @@ DOCDIR?=$(DATADIR)/doc/iproute2
MANDIR
?=
$(DATADIR)
/man
MANDIR
?=
$(DATADIR)
/man
ARPDDIR
?=
/var/lib/arpd
ARPDDIR
?=
/var/lib/arpd
KERNEL_INCLUDE
?=
/usr/include
KERNEL_INCLUDE
?=
/usr/include
BASH_COMPDIR
?=
$(DATADIR)
/bash-completion/completions
# Path to db_185.h include
# Path to db_185.h include
DBM_INCLUDE
:=
$(DESTDIR)
/usr/include
DBM_INCLUDE
:=
$(DESTDIR)
/usr/include
...
@@ -66,6 +67,8 @@ install: all
...
@@ -66,6 +67,8 @@ install: all
$(DESTDIR)$(DOCDIR)
/examples/diffserv
$(DESTDIR)$(DOCDIR)
/examples/diffserv
@
for
i
in
$(SUBDIRS)
doc
;
do
$(MAKE)
-C
$$
i
install
;
done
@
for
i
in
$(SUBDIRS)
doc
;
do
$(MAKE)
-C
$$
i
install
;
done
install
-m
0644
$(
shell
find etc/iproute2
-maxdepth
1
-type
f
)
$(DESTDIR)$(CONFDIR)
install
-m
0644
$(
shell
find etc/iproute2
-maxdepth
1
-type
f
)
$(DESTDIR)$(CONFDIR)
install
-m
0755
-d
$(DESTDIR)$(BASH_COMPDIR)
install
-m
0644 bash-completion/tc
$(DESTDIR)$(BASH_COMPDIR)
snapshot
:
snapshot
:
echo
"static const char SNAPSHOT[] =
\"
"
`
date
+%y%m%d
`
"
\"
;"
\
echo
"static const char SNAPSHOT[] =
\"
"
`
date
+%y%m%d
`
"
\"
;"
\
...
...
bash-completion/tc
0 → 100644
View file @
7fd86a96
This diff is collapsed.
Click to expand it.
devlink/devlink.c
View file @
7fd86a96
This diff is collapsed.
Click to expand it.
include/linux/devlink.h
View file @
7fd86a96
...
@@ -33,30 +33,6 @@ enum devlink_command {
...
@@ -33,30 +33,6 @@ enum devlink_command {
DEVLINK_CMD_PORT_SPLIT
,
DEVLINK_CMD_PORT_SPLIT
,
DEVLINK_CMD_PORT_UNSPLIT
,
DEVLINK_CMD_PORT_UNSPLIT
,
DEVLINK_CMD_SB_GET
,
/* can dump */
DEVLINK_CMD_SB_SET
,
DEVLINK_CMD_SB_NEW
,
DEVLINK_CMD_SB_DEL
,
DEVLINK_CMD_SB_POOL_GET
,
/* can dump */
DEVLINK_CMD_SB_POOL_SET
,
DEVLINK_CMD_SB_POOL_NEW
,
DEVLINK_CMD_SB_POOL_DEL
,
DEVLINK_CMD_SB_PORT_POOL_GET
,
/* can dump */
DEVLINK_CMD_SB_PORT_POOL_SET
,
DEVLINK_CMD_SB_PORT_POOL_NEW
,
DEVLINK_CMD_SB_PORT_POOL_DEL
,
DEVLINK_CMD_SB_TC_POOL_BIND_GET
,
/* can dump */
DEVLINK_CMD_SB_TC_POOL_BIND_SET
,
DEVLINK_CMD_SB_TC_POOL_BIND_NEW
,
DEVLINK_CMD_SB_TC_POOL_BIND_DEL
,
/* Shared buffer occupancy monitoring commands */
DEVLINK_CMD_SB_OCC_SNAPSHOT
,
DEVLINK_CMD_SB_OCC_MAX_CLEAR
,
/* add new commands above here */
/* add new commands above here */
__DEVLINK_CMD_MAX
,
__DEVLINK_CMD_MAX
,
...
@@ -70,31 +46,6 @@ enum devlink_port_type {
...
@@ -70,31 +46,6 @@ enum devlink_port_type {
DEVLINK_PORT_TYPE_IB
,
DEVLINK_PORT_TYPE_IB
,
};
};
enum
devlink_sb_pool_type
{
DEVLINK_SB_POOL_TYPE_INGRESS
,
DEVLINK_SB_POOL_TYPE_EGRESS
,
};
/* static threshold - limiting the maximum number of bytes.
* dynamic threshold - limiting the maximum number of bytes
* based on the currently available free space in the shared buffer pool.
* In this mode, the maximum quota is calculated based
* on the following formula:
* max_quota = alpha / (1 + alpha) * Free_Buffer
* While Free_Buffer is the amount of none-occupied buffer associated to
* the relevant pool.
* The value range which can be passed is 0-20 and serves
* for computation of alpha by following formula:
* alpha = 2 ^ (passed_value - 10)
*/
enum
devlink_sb_threshold_type
{
DEVLINK_SB_THRESHOLD_TYPE_STATIC
,
DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC
,
};
#define DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX 20
enum
devlink_attr
{
enum
devlink_attr
{
/* don't change the order or add anything between, this is ABI! */
/* don't change the order or add anything between, this is ABI! */
DEVLINK_ATTR_UNSPEC
,
DEVLINK_ATTR_UNSPEC
,
...
@@ -111,20 +62,6 @@ enum devlink_attr {
...
@@ -111,20 +62,6 @@ enum devlink_attr {
DEVLINK_ATTR_PORT_IBDEV_NAME
,
/* string */
DEVLINK_ATTR_PORT_IBDEV_NAME
,
/* string */
DEVLINK_ATTR_PORT_SPLIT_COUNT
,
/* u32 */
DEVLINK_ATTR_PORT_SPLIT_COUNT
,
/* u32 */
DEVLINK_ATTR_PORT_SPLIT_GROUP
,
/* u32 */
DEVLINK_ATTR_PORT_SPLIT_GROUP
,
/* u32 */
DEVLINK_ATTR_SB_INDEX
,
/* u32 */
DEVLINK_ATTR_SB_SIZE
,
/* u32 */
DEVLINK_ATTR_SB_INGRESS_POOL_COUNT
,
/* u16 */
DEVLINK_ATTR_SB_EGRESS_POOL_COUNT
,
/* u16 */
DEVLINK_ATTR_SB_INGRESS_TC_COUNT
,
/* u16 */
DEVLINK_ATTR_SB_EGRESS_TC_COUNT
,
/* u16 */
DEVLINK_ATTR_SB_POOL_INDEX
,
/* u16 */
DEVLINK_ATTR_SB_POOL_TYPE
,
/* u8 */
DEVLINK_ATTR_SB_POOL_SIZE
,
/* u32 */
DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE
,
/* u8 */
DEVLINK_ATTR_SB_THRESHOLD
,
/* u32 */
DEVLINK_ATTR_SB_TC_INDEX
,
/* u16 */
DEVLINK_ATTR_SB_OCC_CUR
,
/* u32 */
DEVLINK_ATTR_SB_OCC_MAX
,
/* u32 */
/* add new attributes above here, update the policy in devlink.c */
/* add new attributes above here, update the policy in devlink.c */
...
...
include/linux/if.h
View file @
7fd86a96
...
@@ -19,14 +19,20 @@
...
@@ -19,14 +19,20 @@
#ifndef _LINUX_IF_H
#ifndef _LINUX_IF_H
#define _LINUX_IF_H
#define _LINUX_IF_H
#include <linux/libc-compat.h>
/* for compatibility with glibc */
#include <linux/types.h>
/* for "__kernel_caddr_t" et al */
#include <linux/types.h>
/* for "__kernel_caddr_t" et al */
#include <linux/socket.h>
/* for "struct sockaddr" et al */
#include <linux/socket.h>
/* for "struct sockaddr" et al */
/* for "__user" et al */
/* for "__user" et al */
#if __UAPI_DEF_IF_IFNAMSIZ
#define IFNAMSIZ 16
#define IFNAMSIZ 16
#endif
/* __UAPI_DEF_IF_IFNAMSIZ */
#define IFALIASZ 256
#define IFALIASZ 256
#include <linux/hdlc/ioctl.h>
#include <linux/hdlc/ioctl.h>
/* For glibc compatibility. An empty enum does not compile. */
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && \
__UAPI_DEF_IF_NET_DEVICE_FLAGS != 0
/**
/**
* enum net_device_flags - &struct net_device flags
* enum net_device_flags - &struct net_device flags
*
*
...
@@ -68,6 +74,8 @@
...
@@ -68,6 +74,8 @@
* @IFF_ECHO: echo sent packets. Volatile.
* @IFF_ECHO: echo sent packets. Volatile.
*/
*/
enum
net_device_flags
{
enum
net_device_flags
{
/* for compatibility with glibc net/if.h */
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
IFF_UP
=
1
<<
0
,
/* sysfs */
IFF_UP
=
1
<<
0
,
/* sysfs */
IFF_BROADCAST
=
1
<<
1
,
/* __volatile__ */
IFF_BROADCAST
=
1
<<
1
,
/* __volatile__ */
IFF_DEBUG
=
1
<<
2
,
/* sysfs */
IFF_DEBUG
=
1
<<
2
,
/* sysfs */
...
@@ -84,11 +92,17 @@ enum net_device_flags {
...
@@ -84,11 +92,17 @@ enum net_device_flags {
IFF_PORTSEL
=
1
<<
13
,
/* sysfs */
IFF_PORTSEL
=
1
<<
13
,
/* sysfs */
IFF_AUTOMEDIA
=
1
<<
14
,
/* sysfs */
IFF_AUTOMEDIA
=
1
<<
14
,
/* sysfs */
IFF_DYNAMIC
=
1
<<
15
,
/* sysfs */
IFF_DYNAMIC
=
1
<<
15
,
/* sysfs */
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
IFF_LOWER_UP
=
1
<<
16
,
/* __volatile__ */
IFF_LOWER_UP
=
1
<<
16
,
/* __volatile__ */
IFF_DORMANT
=
1
<<
17
,
/* __volatile__ */
IFF_DORMANT
=
1
<<
17
,
/* __volatile__ */
IFF_ECHO
=
1
<<
18
,
/* __volatile__ */
IFF_ECHO
=
1
<<
18
,
/* __volatile__ */
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
};
};
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0 */
/* for compatibility with glibc net/if.h */
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
#define IFF_UP IFF_UP
#define IFF_UP IFF_UP
#define IFF_BROADCAST IFF_BROADCAST
#define IFF_BROADCAST IFF_BROADCAST
#define IFF_DEBUG IFF_DEBUG
#define IFF_DEBUG IFF_DEBUG
...
@@ -105,9 +119,13 @@ enum net_device_flags {
...
@@ -105,9 +119,13 @@ enum net_device_flags {
#define IFF_PORTSEL IFF_PORTSEL
#define IFF_PORTSEL IFF_PORTSEL
#define IFF_AUTOMEDIA IFF_AUTOMEDIA
#define IFF_AUTOMEDIA IFF_AUTOMEDIA
#define IFF_DYNAMIC IFF_DYNAMIC
#define IFF_DYNAMIC IFF_DYNAMIC
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
#define IFF_LOWER_UP IFF_LOWER_UP
#define IFF_LOWER_UP IFF_LOWER_UP
#define IFF_DORMANT IFF_DORMANT
#define IFF_DORMANT IFF_DORMANT
#define IFF_ECHO IFF_ECHO
#define IFF_ECHO IFF_ECHO
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
...
@@ -166,6 +184,8 @@ enum {
...
@@ -166,6 +184,8 @@ enum {
* being very small might be worth keeping for clean configuration.
* being very small might be worth keeping for clean configuration.
*/
*/
/* for compatibility with glibc net/if.h */
#if __UAPI_DEF_IF_IFMAP
struct
ifmap
{
struct
ifmap
{
unsigned
long
mem_start
;
unsigned
long
mem_start
;
unsigned
long
mem_end
;
unsigned
long
mem_end
;
...
@@ -175,6 +195,7 @@ struct ifmap {
...
@@ -175,6 +195,7 @@ struct ifmap {
unsigned
char
port
;
unsigned
char
port
;
/* 3 bytes spare */
/* 3 bytes spare */
};
};
#endif
/* __UAPI_DEF_IF_IFMAP */
struct
if_settings
{
struct
if_settings
{
unsigned
int
type
;
/* Type of physical device or protocol */
unsigned
int
type
;
/* Type of physical device or protocol */
...
@@ -200,6 +221,8 @@ struct if_settings {
...
@@ -200,6 +221,8 @@ struct if_settings {
* remainder may be interface specific.
* remainder may be interface specific.
*/
*/
/* for compatibility with glibc net/if.h */
#if __UAPI_DEF_IF_IFREQ
struct
ifreq
{
struct
ifreq
{
#define IFHWADDRLEN 6
#define IFHWADDRLEN 6
union
union
...
@@ -223,6 +246,7 @@ struct ifreq {
...
@@ -223,6 +246,7 @@ struct ifreq {
struct
if_settings
ifru_settings
;
struct
if_settings
ifru_settings
;
}
ifr_ifru
;
}
ifr_ifru
;
};
};
#endif
/* __UAPI_DEF_IF_IFREQ */
#define ifr_name ifr_ifrn.ifrn_name
/* interface name */
#define ifr_name ifr_ifrn.ifrn_name
/* interface name */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr
/* MAC address */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr
/* MAC address */
...
@@ -249,6 +273,8 @@ struct ifreq {
...
@@ -249,6 +273,8 @@ struct ifreq {
* must know all networks accessible).
* must know all networks accessible).
*/
*/
/* for compatibility with glibc net/if.h */
#if __UAPI_DEF_IF_IFCONF
struct
ifconf
{
struct
ifconf
{
int
ifc_len
;
/* size of buffer */
int
ifc_len
;
/* size of buffer */
union
{
union
{
...
@@ -256,6 +282,8 @@ struct ifconf {
...
@@ -256,6 +282,8 @@ struct ifconf {
struct
ifreq
*
ifcu_req
;
struct
ifreq
*
ifcu_req
;
}
ifc_ifcu
;
}
ifc_ifcu
;
};
};
#endif
/* __UAPI_DEF_IF_IFCONF */
#define ifc_buf ifc_ifcu.ifcu_buf
/* buffer address */
#define ifc_buf ifc_ifcu.ifcu_buf
/* buffer address */
#define ifc_req ifc_ifcu.ifcu_req
/* array of structures */
#define ifc_req ifc_ifcu.ifcu_req
/* array of structures */
...
...
include/linux/libc-compat.h
View file @
7fd86a96
...
@@ -51,6 +51,40 @@
...
@@ -51,6 +51,40 @@
/* We have included glibc headers... */
/* We have included glibc headers... */
#if defined(__GLIBC__)
#if defined(__GLIBC__)
/* Coordinate with glibc net/if.h header. */
#if defined(_NET_IF_H)
/* GLIBC headers included first so don't define anything
* that would already be defined. */
#define __UAPI_DEF_IF_IFCONF 0
#define __UAPI_DEF_IF_IFMAP 0
#define __UAPI_DEF_IF_IFNAMSIZ 0
#define __UAPI_DEF_IF_IFREQ 0
/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0
/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
#endif
/* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
#else
/* _NET_IF_H */
/* Linux headers included first, and we must define everything
* we need. The expectation is that glibc will check the
* __UAPI_DEF_* defines and adjust appropriately. */
#define __UAPI_DEF_IF_IFCONF 1
#define __UAPI_DEF_IF_IFMAP 1
#define __UAPI_DEF_IF_IFNAMSIZ 1
#define __UAPI_DEF_IF_IFREQ 1
/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
#endif
/* _NET_IF_H */
/* Coordinate with glibc netinet/in.h header. */
/* Coordinate with glibc netinet/in.h header. */
#if defined(_NETINET_IN_H)
#if defined(_NETINET_IN_H)
...
@@ -117,6 +151,16 @@
...
@@ -117,6 +151,16 @@
* that we need. */
* that we need. */
#else
/* !defined(__GLIBC__) */
#else
/* !defined(__GLIBC__) */
/* Definitions for if.h */
#define __UAPI_DEF_IF_IFCONF 1
#define __UAPI_DEF_IF_IFMAP 1
#define __UAPI_DEF_IF_IFNAMSIZ 1
#define __UAPI_DEF_IF_IFREQ 1
/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
/* Definitions for in.h */
/* Definitions for in.h */
#define __UAPI_DEF_IN_ADDR 1
#define __UAPI_DEF_IN_ADDR 1
#define __UAPI_DEF_IN_IPPROTO 1
#define __UAPI_DEF_IN_IPPROTO 1
...
...
include/linux/netfilter_ipv4/ip_tables.h
View file @
7fd86a96
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#include <linux/types.h>
#include <linux/types.h>
#include <linux/if.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/x_tables.h>
...
...
ip/iplink_geneve.c
View file @
7fd86a96
...
@@ -204,7 +204,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -204,7 +204,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
memcpy
(
&
addr
,
RTA_DATA
(
tb
[
IFLA_GENEVE_REMOTE6
]),
sizeof
(
struct
in6_addr
));
memcpy
(
&
addr
,
RTA_DATA
(
tb
[
IFLA_GENEVE_REMOTE6
]),
sizeof
(
struct
in6_addr
));
if
(
memcmp
(
&
addr
,
&
in6addr_any
,
sizeof
(
addr
))
!=
0
)
{
if
(
memcmp
(
&
addr
,
&
in6addr_any
,
sizeof
(
addr
))
!=
0
)
{
if
(
IN6_IS_ADDR_MULTICAST
(
&
addr
))
if
(
!
IN6_IS_ADDR_MULTICAST
(
&
addr
))
fprintf
(
f
,
"remote %s "
,
fprintf
(
f
,
"remote %s "
,
format_host
(
AF_INET6
,
sizeof
(
struct
in6_addr
),
&
addr
));
format_host
(
AF_INET6
,
sizeof
(
struct
in6_addr
),
&
addr
));
}
}
...
...
ip/link_gre.c
View file @
7fd86a96
...
@@ -315,6 +315,7 @@ get_failed:
...
@@ -315,6 +315,7 @@ get_failed:
return
-
1
;
return
-
1
;
}
}
if
(
!
metadata
)
{
addattr32
(
n
,
1024
,
IFLA_GRE_IKEY
,
ikey
);
addattr32
(
n
,
1024
,
IFLA_GRE_IKEY
,
ikey
);
addattr32
(
n
,
1024
,
IFLA_GRE_OKEY
,
okey
);
addattr32
(
n
,
1024
,
IFLA_GRE_OKEY
,
okey
);
addattr_l
(
n
,
1024
,
IFLA_GRE_IFLAGS
,
&
iflags
,
2
);
addattr_l
(
n
,
1024
,
IFLA_GRE_IFLAGS
,
&
iflags
,
2
);
...
@@ -326,18 +327,19 @@ get_failed:
...
@@ -326,18 +327,19 @@ get_failed:
addattr32
(
n
,
1024
,
IFLA_GRE_LINK
,
link
);
addattr32
(
n
,
1024
,
IFLA_GRE_LINK
,
link
);
addattr_l
(
n
,
1024
,
IFLA_GRE_TTL
,
&
ttl
,
1
);
addattr_l
(
n
,
1024
,
IFLA_GRE_TTL
,
&
ttl
,
1
);
addattr_l
(
n
,
1024
,
IFLA_GRE_TOS
,
&
tos
,
1
);
addattr_l
(
n
,
1024
,
IFLA_GRE_TOS
,
&
tos
,
1
);
}
else
{
addattr_l
(
n
,
1024
,
IFLA_GRE_COLLECT_METADATA
,
NULL
,
0
);
}
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_TYPE
,
encaptype
);
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_TYPE
,
encaptype
);
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_FLAGS
,
encapflags
);
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_FLAGS
,
encapflags
);
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_SPORT
,
htons
(
encapsport
));
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_SPORT
,
htons
(
encapsport
));
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_DPORT
,
htons
(
encapdport
));
addattr16
(
n
,
1024
,
IFLA_GRE_ENCAP_DPORT
,
htons
(
encapdport
));
if
(
metadata
)
addattr_l
(
n
,
1024
,
IFLA_GRE_COLLECT_METADATA
,
NULL
,
0
);
return
0
;
return
0
;
}
}
static
void
gre_print_
opt
(
struct
link_util
*
lu
,
FILE
*
f
,
struct
rtattr
*
tb
[])
static
void
gre_print_
direct_opt
(
FILE
*
f
,
struct
rtattr
*
tb
[])
{
{
char
s2
[
64
];
char
s2
[
64
];
const
char
*
local
=
"any"
;
const
char
*
local
=
"any"
;
...
@@ -345,9 +347,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -345,9 +347,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
unsigned
int
iflags
=
0
;
unsigned
int
iflags
=
0
;
unsigned
int
oflags
=
0
;
unsigned
int
oflags
=
0
;
if
(
!
tb
)
return
;
if
(
tb
[
IFLA_GRE_REMOTE
])
{
if
(
tb
[
IFLA_GRE_REMOTE
])
{
unsigned
int
addr
=
rta_getattr_u32
(
tb
[
IFLA_GRE_REMOTE
]);
unsigned
int
addr
=
rta_getattr_u32
(
tb
[
IFLA_GRE_REMOTE
]);
...
@@ -419,8 +418,16 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
...
@@ -419,8 +418,16 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
fputs
(
"icsum "
,
f
);
fputs
(
"icsum "
,
f
);
if
(
oflags
&
GRE_CSUM
)
if
(
oflags
&
GRE_CSUM
)
fputs
(
"ocsum "
,
f
);
fputs
(
"ocsum "
,
f
);
}
if
(
tb
[
IFLA_GRE_COLLECT_METADATA
])
static
void
gre_print_opt
(
struct
link_util
*
lu
,
FILE
*
f
,
struct
rtattr
*
tb
[])
{
if
(
!
tb
)
return
;
if
(
!
tb
[
IFLA_GRE_COLLECT_METADATA
])
gre_print_direct_opt
(
f
,
tb
);
else
fputs
(
"external "
,
f
);
fputs
(
"external "
,
f
);
if
(
tb
[
IFLA_GRE_ENCAP_TYPE
]
&&
if
(
tb
[
IFLA_GRE_ENCAP_TYPE
]
&&
...
...
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