Add rule notification support to ip monitor
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
This commit is contained in:
parent
3123a0ccdd
commit
98bde989db
|
|
@ -20,6 +20,8 @@ extern int print_route(const struct sockaddr_nl *who,
|
||||||
struct nlmsghdr *n, void *arg);
|
struct nlmsghdr *n, void *arg);
|
||||||
extern int print_prefix(const struct sockaddr_nl *who,
|
extern int print_prefix(const struct sockaddr_nl *who,
|
||||||
struct nlmsghdr *n, void *arg);
|
struct nlmsghdr *n, void *arg);
|
||||||
|
extern int print_rule(const struct sockaddr_nl *who,
|
||||||
|
struct nlmsghdr *n, void *arg);
|
||||||
extern int do_ipaddr(int argc, char **argv);
|
extern int do_ipaddr(int argc, char **argv);
|
||||||
extern int do_iproute(int argc, char **argv);
|
extern int do_iproute(int argc, char **argv);
|
||||||
extern int do_iprule(int argc, char **argv);
|
extern int do_iprule(int argc, char **argv);
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,10 @@ int accept_msg(const struct sockaddr_nl *who,
|
||||||
print_prefix(who, n, arg);
|
print_prefix(who, n, arg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (n->nlmsg_type == RTM_NEWRULE || n->nlmsg_type == RTM_DELRULE) {
|
||||||
|
print_rule(who, n, arg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (n->nlmsg_type == 15) {
|
if (n->nlmsg_type == 15) {
|
||||||
char *tstr;
|
char *tstr;
|
||||||
time_t secs = ((__u32*)NLMSG_DATA(n))[0];
|
time_t secs = ((__u32*)NLMSG_DATA(n))[0];
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,7 @@ static void usage(void)
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
|
||||||
void *arg)
|
|
||||||
{
|
{
|
||||||
FILE *fp = (FILE*)arg;
|
FILE *fp = (FILE*)arg;
|
||||||
struct rtmsg *r = NLMSG_DATA(n);
|
struct rtmsg *r = NLMSG_DATA(n);
|
||||||
|
|
@ -58,7 +57,7 @@ static int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
||||||
char abuf[256];
|
char abuf[256];
|
||||||
SPRINT_BUF(b1);
|
SPRINT_BUF(b1);
|
||||||
|
|
||||||
if (n->nlmsg_type != RTM_NEWRULE)
|
if (n->nlmsg_type != RTM_NEWRULE && n->nlmsg_type != RTM_DELRULE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
len -= NLMSG_LENGTH(sizeof(*r));
|
len -= NLMSG_LENGTH(sizeof(*r));
|
||||||
|
|
@ -76,6 +75,9 @@ static int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n,
|
||||||
else if (r->rtm_family == AF_IPX)
|
else if (r->rtm_family == AF_IPX)
|
||||||
host_len = 80;
|
host_len = 80;
|
||||||
|
|
||||||
|
if (n->nlmsg_type == RTM_DELRULE)
|
||||||
|
fprintf(fp, "Deleted ");
|
||||||
|
|
||||||
if (tb[RTA_PRIORITY])
|
if (tb[RTA_PRIORITY])
|
||||||
fprintf(fp, "%u:\t", *(unsigned*)RTA_DATA(tb[RTA_PRIORITY]));
|
fprintf(fp, "%u:\t", *(unsigned*)RTA_DATA(tb[RTA_PRIORITY]));
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue