mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-11-03 20:47:11 +00:00
Merge branch 'master' into net-next
This commit is contained in:
commit
242a9f73b6
@ -35,17 +35,6 @@ static void usage(void)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
static int show_mark(FILE *fp, const struct nlmsghdr *n)
|
||||
{
|
||||
char *tstr;
|
||||
time_t secs = ((__u32*)NLMSG_DATA(n))[0];
|
||||
long usecs = ((__u32*)NLMSG_DATA(n))[1];
|
||||
tstr = asctime(localtime(&secs));
|
||||
tstr[strlen(tstr)-1] = 0;
|
||||
fprintf(fp, "Timestamp: %s %lu us\n", tstr, usecs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int accept_msg(const struct sockaddr_nl *who,
|
||||
struct nlmsghdr *n, void *arg)
|
||||
{
|
||||
@ -74,14 +63,13 @@ static int accept_msg(const struct sockaddr_nl *who,
|
||||
fprintf(fp, "[MDB]");
|
||||
return print_mdb(who, n, arg);
|
||||
|
||||
case 15:
|
||||
return show_mark(fp, n);
|
||||
case NLMSG_TSTAMP:
|
||||
print_nlmsg_timestamp(fp, n);
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
int do_monitor(int argc, char **argv)
|
||||
|
||||
@ -158,5 +158,9 @@ extern int rtnl_from_file(FILE *, rtnl_filter_t handler,
|
||||
#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg))
|
||||
#endif
|
||||
|
||||
/* User defined nlmsg_type which is used mostly for logging netlink
|
||||
* messages from dump file */
|
||||
#define NLMSG_TSTAMP 15
|
||||
|
||||
#endif /* __LIBNETLINK_H__ */
|
||||
|
||||
|
||||
@ -42,5 +42,6 @@ static int setns(int fd, int nstype)
|
||||
#endif /* HAVE_SETNS */
|
||||
|
||||
extern int netns_switch(char *netns);
|
||||
extern int netns_get_fd(const char *netns);
|
||||
|
||||
#endif /* __NAMESPACE_H__ */
|
||||
|
||||
@ -148,6 +148,7 @@ static inline __u32 nl_mgrp(__u32 group)
|
||||
|
||||
|
||||
int print_timestamp(FILE *fp);
|
||||
void print_nlmsg_timestamp(FILE *fp, const struct nlmsghdr *n);
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
@ -160,4 +161,5 @@ struct iplink_req;
|
||||
int iplink_parse(int argc, char **argv, struct iplink_req *req,
|
||||
char **name, char **type, char **link, char **dev,
|
||||
int *group, int *index);
|
||||
|
||||
#endif /* __UTILS_H__ */
|
||||
|
||||
@ -87,7 +87,6 @@ struct link_util
|
||||
|
||||
struct link_util *get_link_kind(const char *kind);
|
||||
struct link_util *get_link_slave_kind(const char *slave_kind);
|
||||
int get_netns_fd(const char *name);
|
||||
|
||||
#ifndef INFINITY_LIFE_TIME
|
||||
#define INFINITY_LIFE_TIME 0xFFFFFFFFU
|
||||
|
||||
@ -255,15 +255,37 @@ static void print_linktype(FILE *fp, struct rtattr *tb)
|
||||
}
|
||||
}
|
||||
|
||||
static void print_af_spec(FILE *fp, struct rtattr *af_spec_attr)
|
||||
{
|
||||
struct rtattr *inet6_attr;
|
||||
struct rtattr *tb[IFLA_INET6_MAX + 1];
|
||||
|
||||
inet6_attr = parse_rtattr_one_nested(AF_INET6, af_spec_attr);
|
||||
if (!inet6_attr)
|
||||
return;
|
||||
|
||||
parse_rtattr_nested(tb, IFLA_INET6_MAX, inet6_attr);
|
||||
|
||||
if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
|
||||
switch (rta_getattr_u8(tb[IFLA_INET6_ADDR_GEN_MODE])) {
|
||||
case IN6_ADDR_GEN_MODE_EUI64:
|
||||
fprintf(fp, "addrgenmode eui64 ");
|
||||
break;
|
||||
case IN6_ADDR_GEN_MODE_NONE:
|
||||
fprintf(fp, "addrgenmode none ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void print_vfinfo(FILE *fp, struct rtattr *vfinfo)
|
||||
{
|
||||
struct ifla_vf_mac *vf_mac;
|
||||
struct ifla_vf_vlan *vf_vlan;
|
||||
struct ifla_vf_rate *vf_rate;
|
||||
struct ifla_vf_tx_rate *vf_tx_rate;
|
||||
struct ifla_vf_spoofchk *vf_spoofchk;
|
||||
struct ifla_vf_link_state *vf_linkstate;
|
||||
struct rtattr *vf[IFLA_VF_MAX+1];
|
||||
struct rtattr *vf[IFLA_VF_MAX + 1] = {};
|
||||
struct rtattr *tmp;
|
||||
SPRINT_BUF(b1);
|
||||
|
||||
@ -277,7 +299,6 @@ static void print_vfinfo(FILE *fp, struct rtattr *vfinfo)
|
||||
vf_mac = RTA_DATA(vf[IFLA_VF_MAC]);
|
||||
vf_vlan = RTA_DATA(vf[IFLA_VF_VLAN]);
|
||||
vf_tx_rate = RTA_DATA(vf[IFLA_VF_TX_RATE]);
|
||||
vf_rate = RTA_DATA(vf[IFLA_VF_RATE]);
|
||||
|
||||
/* Check if the spoof checking vf info type is supported by
|
||||
* this kernel.
|
||||
@ -313,10 +334,16 @@ static void print_vfinfo(FILE *fp, struct rtattr *vfinfo)
|
||||
fprintf(fp, ", qos %d", vf_vlan->qos);
|
||||
if (vf_tx_rate->rate)
|
||||
fprintf(fp, ", tx rate %d (Mbps)", vf_tx_rate->rate);
|
||||
if (vf_rate->max_tx_rate)
|
||||
fprintf(fp, ", max_tx_rate %dMbps", vf_rate->max_tx_rate);
|
||||
if (vf_rate->min_tx_rate)
|
||||
fprintf(fp, ", min_tx_rate %dMbps", vf_rate->min_tx_rate);
|
||||
|
||||
if (vf[IFLA_VF_RATE]) {
|
||||
struct ifla_vf_rate *vf_rate = RTA_DATA(vf[IFLA_VF_RATE]);
|
||||
|
||||
if (vf_rate->max_tx_rate)
|
||||
fprintf(fp, ", max_tx_rate %dMbps", vf_rate->max_tx_rate);
|
||||
if (vf_rate->min_tx_rate)
|
||||
fprintf(fp, ", min_tx_rate %dMbps", vf_rate->min_tx_rate);
|
||||
}
|
||||
|
||||
if (vf_spoofchk && vf_spoofchk->setting != -1) {
|
||||
if (vf_spoofchk->setting)
|
||||
fprintf(fp, ", spoof checking on");
|
||||
@ -658,6 +685,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
|
||||
if (tb[IFLA_LINKINFO] && show_details)
|
||||
print_linktype(fp, tb[IFLA_LINKINFO]);
|
||||
|
||||
if (do_link && tb[IFLA_AF_SPEC] && show_details)
|
||||
print_af_spec(fp, tb[IFLA_AF_SPEC]);
|
||||
|
||||
if ((do_link || show_details) && tb[IFLA_IFALIAS]) {
|
||||
fprintf(fp, "%s alias %s", _SL_,
|
||||
rta_getattr_str(tb[IFLA_IFALIAS]));
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
#include "rt_names.h"
|
||||
#include "utils.h"
|
||||
#include "ip_common.h"
|
||||
#include "namespace.h"
|
||||
|
||||
#define IPLINK_IOCTL_COMPAT 1
|
||||
#ifndef LIBDIR
|
||||
@ -440,7 +441,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
|
||||
NEXT_ARG();
|
||||
if (netns != -1)
|
||||
duparg("netns", *argv);
|
||||
if ((netns = get_netns_fd(*argv)) >= 0)
|
||||
if ((netns = netns_get_fd(*argv)) >= 0)
|
||||
addattr_l(&req->n, sizeof(*req), IFLA_NET_NS_FD, &netns, 4);
|
||||
else if (get_integer(&netns, *argv, 0) == 0)
|
||||
addattr_l(&req->n, sizeof(*req), IFLA_NET_NS_PID, &netns, 4);
|
||||
|
||||
@ -125,13 +125,8 @@ static int accept_msg(const struct sockaddr_nl *who,
|
||||
print_netconf(who, n, arg);
|
||||
return 0;
|
||||
}
|
||||
if (n->nlmsg_type == 15) {
|
||||
char *tstr;
|
||||
time_t secs = ((__u32*)NLMSG_DATA(n))[0];
|
||||
long usecs = ((__u32*)NLMSG_DATA(n))[1];
|
||||
tstr = asctime(localtime(&secs));
|
||||
tstr[strlen(tstr)-1] = 0;
|
||||
fprintf(fp, "Timestamp: %s %lu us\n", tstr, usecs);
|
||||
if (n->nlmsg_type == NLMSG_TSTAMP) {
|
||||
print_nlmsg_timestamp(fp, n);
|
||||
return 0;
|
||||
}
|
||||
if (n->nlmsg_type != NLMSG_ERROR && n->nlmsg_type != NLMSG_NOOP &&
|
||||
|
||||
15
ip/ipnetns.c
15
ip/ipnetns.c
@ -31,21 +31,6 @@ static int usage(void)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int get_netns_fd(const char *name)
|
||||
{
|
||||
char pathbuf[MAXPATHLEN];
|
||||
const char *path, *ptr;
|
||||
|
||||
path = name;
|
||||
ptr = strchr(name, '/');
|
||||
if (!ptr) {
|
||||
snprintf(pathbuf, sizeof(pathbuf), "%s/%s",
|
||||
NETNS_RUN_DIR, name );
|
||||
path = pathbuf;
|
||||
}
|
||||
return open(path, O_RDONLY);
|
||||
}
|
||||
|
||||
static int netns_list(int argc, char **argv)
|
||||
{
|
||||
struct dirent *entry;
|
||||
|
||||
@ -34,7 +34,7 @@ static void write_stamp(FILE *fp)
|
||||
struct nlmsghdr *n1 = (void*)buf;
|
||||
struct timeval tv;
|
||||
|
||||
n1->nlmsg_type = 15;
|
||||
n1->nlmsg_type = NLMSG_TSTAMP;
|
||||
n1->nlmsg_flags = 0;
|
||||
n1->nlmsg_seq = 0;
|
||||
n1->nlmsg_pid = 0;
|
||||
|
||||
@ -84,3 +84,18 @@ int netns_switch(char *name)
|
||||
bind_etc(name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int netns_get_fd(const char *name)
|
||||
{
|
||||
char pathbuf[MAXPATHLEN];
|
||||
const char *path, *ptr;
|
||||
|
||||
path = name;
|
||||
ptr = strchr(name, '/');
|
||||
if (!ptr) {
|
||||
snprintf(pathbuf, sizeof(pathbuf), "%s/%s",
|
||||
NETNS_RUN_DIR, name );
|
||||
path = pathbuf;
|
||||
}
|
||||
return open(path, O_RDONLY);
|
||||
}
|
||||
|
||||
10
lib/utils.c
10
lib/utils.c
@ -868,3 +868,13 @@ int inet_get_addr(const char *src, __u32 *dst, struct in6_addr *dst6)
|
||||
else
|
||||
return inet_pton(AF_INET, src, dst);
|
||||
}
|
||||
|
||||
void print_nlmsg_timestamp(FILE *fp, const struct nlmsghdr *n)
|
||||
{
|
||||
char *tstr;
|
||||
time_t secs = ((__u32*)NLMSG_DATA(n))[0];
|
||||
long usecs = ((__u32*)NLMSG_DATA(n))[1];
|
||||
tstr = asctime(localtime(&secs));
|
||||
tstr[strlen(tstr)-1] = 0;
|
||||
fprintf(fp, "Timestamp: %s %lu us\n", tstr, usecs);
|
||||
}
|
||||
|
||||
44
misc/ss.c
44
misc/ss.c
@ -2287,12 +2287,12 @@ static int udp_show(struct filter *f)
|
||||
{
|
||||
FILE *fp = NULL;
|
||||
|
||||
dg_proto = UDP_PROTO;
|
||||
|
||||
if (!getenv("PROC_NET_UDP") && !getenv("PROC_ROOT")
|
||||
&& inet_show_netlink(f, NULL, IPPROTO_UDP) == 0)
|
||||
return 0;
|
||||
|
||||
dg_proto = UDP_PROTO;
|
||||
|
||||
if (f->families&(1<<AF_INET)) {
|
||||
if ((fp = net_udp_open()) == NULL)
|
||||
goto outerr;
|
||||
@ -3192,30 +3192,30 @@ static void _usage(FILE *dest)
|
||||
fprintf(dest,
|
||||
"Usage: ss [ OPTIONS ]\n"
|
||||
" ss [ OPTIONS ] [ FILTER ]\n"
|
||||
" -h, --help this message\n"
|
||||
" -V, --version output version information\n"
|
||||
" -n, --numeric don't resolve service names\n"
|
||||
" -h, --help this message\n"
|
||||
" -V, --version output version information\n"
|
||||
" -n, --numeric don't resolve service names\n"
|
||||
" -r, --resolve resolve host names\n"
|
||||
" -a, --all display all sockets\n"
|
||||
" -l, --listening display listening sockets\n"
|
||||
" -a, --all display all sockets\n"
|
||||
" -l, --listening display listening sockets\n"
|
||||
" -o, --options show timer information\n"
|
||||
" -e, --extended show detailed socket information\n"
|
||||
" -m, --memory show socket memory usage\n"
|
||||
" -p, --processes show process using socket\n"
|
||||
" -i, --info show internal TCP information\n"
|
||||
" -s, --summary show socket usage summary\n"
|
||||
" -p, --processes show process using socket\n"
|
||||
" -i, --info show internal TCP information\n"
|
||||
" -s, --summary show socket usage summary\n"
|
||||
" -b, --bpf show bpf filter socket information\n"
|
||||
" -Z, --context display process SELinux security contexts\n"
|
||||
" -z, --contexts display process and socket SELinux security contexts\n"
|
||||
" -Z, --context display process SELinux security contexts\n"
|
||||
" -z, --contexts display process and socket SELinux security contexts\n"
|
||||
"\n"
|
||||
" -4, --ipv4 display only IP version 4 sockets\n"
|
||||
" -6, --ipv6 display only IP version 6 sockets\n"
|
||||
" -0, --packet display PACKET sockets\n"
|
||||
" -t, --tcp display only TCP sockets\n"
|
||||
" -u, --udp display only UDP sockets\n"
|
||||
" -d, --dccp display only DCCP sockets\n"
|
||||
" -w, --raw display only RAW sockets\n"
|
||||
" -x, --unix display only Unix domain sockets\n"
|
||||
" -0, --packet display PACKET sockets\n"
|
||||
" -t, --tcp display only TCP sockets\n"
|
||||
" -u, --udp display only UDP sockets\n"
|
||||
" -d, --dccp display only DCCP sockets\n"
|
||||
" -w, --raw display only RAW sockets\n"
|
||||
" -x, --unix display only Unix domain sockets\n"
|
||||
" -f, --family=FAMILY display sockets of type FAMILY\n"
|
||||
"\n"
|
||||
" -A, --query=QUERY, --socket=QUERY\n"
|
||||
@ -3223,7 +3223,13 @@ static void _usage(FILE *dest)
|
||||
"\n"
|
||||
" -D, --diag=FILE Dump raw information about TCP sockets to FILE\n"
|
||||
" -F, --filter=FILE read filter information from FILE\n"
|
||||
" FILTER := [ state TCP-STATE ] [ EXPRESSION ]\n"
|
||||
" FILTER := [ state STATE-FILTER ] [ EXPRESSION ]\n"
|
||||
" STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}\n"
|
||||
" TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}\n"
|
||||
" connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}\n"
|
||||
" synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}\n"
|
||||
" bucket := {syn-recv|time-wait}\n"
|
||||
" big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}\n"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
16
tc/m_vlan.c
16
tc/m_vlan.c
@ -103,20 +103,25 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p,
|
||||
if (argc) {
|
||||
if (matches(*argv, "reclassify") == 0) {
|
||||
parm.action = TC_ACT_RECLASSIFY;
|
||||
NEXT_ARG();
|
||||
argc--;
|
||||
argv++;
|
||||
} else if (matches(*argv, "pipe") == 0) {
|
||||
parm.action = TC_ACT_PIPE;
|
||||
NEXT_ARG();
|
||||
argc--;
|
||||
argv++;
|
||||
} else if (matches(*argv, "drop") == 0 ||
|
||||
matches(*argv, "shot") == 0) {
|
||||
parm.action = TC_ACT_SHOT;
|
||||
NEXT_ARG();
|
||||
argc--;
|
||||
argv++;
|
||||
} else if (matches(*argv, "continue") == 0) {
|
||||
parm.action = TC_ACT_UNSPEC;
|
||||
NEXT_ARG();
|
||||
argc--;
|
||||
argv++;
|
||||
} else if (matches(*argv, "pass") == 0) {
|
||||
parm.action = TC_ACT_OK;
|
||||
NEXT_ARG();
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -198,6 +203,7 @@ static int print_vlan(struct action_util *au, FILE *f, struct rtattr *arg)
|
||||
}
|
||||
break;
|
||||
}
|
||||
fprintf(f, " %s", action_n2a(parm->action, b1, sizeof (b1)));
|
||||
|
||||
fprintf(f, "\n\t index %d ref %d bind %d", parm->index, parm->refcnt,
|
||||
parm->bindcnt);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user