IP link state show enhancements
Show operational state (carrier), as well as fixing functions to be static and use similar API.
This commit is contained in:
parent
bccd5f28a6
commit
3d866ba265
|
|
@ -20,6 +20,7 @@
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/errno.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
@ -114,7 +115,20 @@ void print_link_flags(FILE *fp, unsigned flags, unsigned mdown)
|
||||||
fprintf(fp, "> ");
|
fprintf(fp, "> ");
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_queuelen(char *name)
|
static const char *oper_states[] = {
|
||||||
|
"UNKNOWN", "NOTPRESENT", "DOWN", "LOWERLAYERDOWN",
|
||||||
|
"TESTING", "DORMANT", "UP"
|
||||||
|
};
|
||||||
|
|
||||||
|
static void print_operstate(FILE *f, __u8 state)
|
||||||
|
{
|
||||||
|
if (state >= sizeof(oper_states)/sizeof(oper_states[0]))
|
||||||
|
fprintf(f, "state %#x ", state);
|
||||||
|
else
|
||||||
|
fprintf(f, "state %s ", oper_states[state]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_queuelen(FILE *f, const char *name)
|
||||||
{
|
{
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
int s;
|
int s;
|
||||||
|
|
@ -126,14 +140,14 @@ void print_queuelen(char *name)
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
memset(&ifr, 0, sizeof(ifr));
|
||||||
strcpy(ifr.ifr_name, name);
|
strcpy(ifr.ifr_name, name);
|
||||||
if (ioctl(s, SIOCGIFTXQLEN, &ifr) < 0) {
|
if (ioctl(s, SIOCGIFTXQLEN, &ifr) < 0) {
|
||||||
perror("SIOCGIFXQLEN");
|
fprintf(f, "ioctl(SIOCGIFXQLEN) failed: %s\n", strerror(errno));
|
||||||
close(s);
|
close(s);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
close(s);
|
close(s);
|
||||||
|
|
||||||
if (ifr.ifr_qlen)
|
if (ifr.ifr_qlen)
|
||||||
printf("qlen %d", ifr.ifr_qlen);
|
fprintf(f, "qlen %d", ifr.ifr_qlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_linktype(FILE *fp, struct rtattr *tb)
|
static void print_linktype(FILE *fp, struct rtattr *tb)
|
||||||
|
|
@ -233,8 +247,11 @@ int print_linkinfo(const struct sockaddr_nl *who,
|
||||||
fprintf(fp, "master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1));
|
fprintf(fp, "master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (tb[IFLA_OPERSTATE])
|
||||||
|
print_operstate(fp, *(__u8 *)RTA_DATA(tb[IFLA_OPERSTATE]));
|
||||||
|
|
||||||
if (filter.showqueue)
|
if (filter.showqueue)
|
||||||
print_queuelen((char*)RTA_DATA(tb[IFLA_IFNAME]));
|
print_queuelen(fp, (char*)RTA_DATA(tb[IFLA_IFNAME]));
|
||||||
|
|
||||||
if (!filter.family || filter.family == AF_PACKET) {
|
if (!filter.family || filter.family == AF_PACKET) {
|
||||||
SPRINT_BUF(b1);
|
SPRINT_BUF(b1);
|
||||||
|
|
@ -514,7 +531,7 @@ struct nlmsg_list
|
||||||
struct nlmsghdr h;
|
struct nlmsghdr h;
|
||||||
};
|
};
|
||||||
|
|
||||||
int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *fp)
|
static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *fp)
|
||||||
{
|
{
|
||||||
for ( ;ainfo ; ainfo = ainfo->next) {
|
for ( ;ainfo ; ainfo = ainfo->next) {
|
||||||
struct nlmsghdr *n = &ainfo->h;
|
struct nlmsghdr *n = &ainfo->h;
|
||||||
|
|
@ -557,7 +574,7 @@ static int store_nlmsg(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipaddr_list_or_flush(int argc, char **argv, int flush)
|
static int ipaddr_list_or_flush(int argc, char **argv, int flush)
|
||||||
{
|
{
|
||||||
struct nlmsg_list *linfo = NULL;
|
struct nlmsg_list *linfo = NULL;
|
||||||
struct nlmsg_list *ainfo = NULL;
|
struct nlmsg_list *ainfo = NULL;
|
||||||
|
|
@ -795,7 +812,7 @@ void ipaddr_reset_filter(int oneline)
|
||||||
filter.oneline = oneline;
|
filter.oneline = oneline;
|
||||||
}
|
}
|
||||||
|
|
||||||
int default_scope(inet_prefix *lcl)
|
static int default_scope(inet_prefix *lcl)
|
||||||
{
|
{
|
||||||
if (lcl->family == AF_INET) {
|
if (lcl->family == AF_INET) {
|
||||||
if (lcl->bytelen >= 1 && *(__u8*)&lcl->data == 127)
|
if (lcl->bytelen >= 1 && *(__u8*)&lcl->data == 127)
|
||||||
|
|
@ -804,7 +821,7 @@ int default_scope(inet_prefix *lcl)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipaddr_modify(int cmd, int flags, int argc, char **argv)
|
static int ipaddr_modify(int cmd, int flags, int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
struct nlmsghdr n;
|
struct nlmsghdr n;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue