libnetlink: check flag NLM_F_DUMP_INTR during dumps
When this flag is set, it means that dump was interrupted and result may be inconsistent. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
This commit is contained in:
parent
e8740e42ec
commit
16f02e145e
|
|
@ -194,6 +194,7 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth,
|
||||||
.msg_iovlen = 1,
|
.msg_iovlen = 1,
|
||||||
};
|
};
|
||||||
char buf[16384];
|
char buf[16384];
|
||||||
|
int dump_intr = 0;
|
||||||
|
|
||||||
iov.iov_base = buf;
|
iov.iov_base = buf;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
@ -230,6 +231,9 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth,
|
||||||
h->nlmsg_seq != rth->dump)
|
h->nlmsg_seq != rth->dump)
|
||||||
goto skip_it;
|
goto skip_it;
|
||||||
|
|
||||||
|
if (h->nlmsg_flags & NLM_F_DUMP_INTR)
|
||||||
|
dump_intr = 1;
|
||||||
|
|
||||||
if (h->nlmsg_type == NLMSG_DONE) {
|
if (h->nlmsg_type == NLMSG_DONE) {
|
||||||
found_done = 1;
|
found_done = 1;
|
||||||
break; /* process next filter */
|
break; /* process next filter */
|
||||||
|
|
@ -254,8 +258,12 @@ skip_it:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found_done)
|
if (found_done) {
|
||||||
|
if (dump_intr)
|
||||||
|
fprintf(stderr,
|
||||||
|
"Dump was interrupted and may be inconsistent.\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (msg.msg_flags & MSG_TRUNC) {
|
if (msg.msg_flags & MSG_TRUNC) {
|
||||||
fprintf(stderr, "Message truncated\n");
|
fprintf(stderr, "Message truncated\n");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue