From: Nicolas Dichtel Date: Fri, 22 Mar 2013 06:34:02 +0000 (+0000) Subject: libnetlink: check flag NLM_F_DUMP_INTR during dumps X-Git-Tag: v3.9.0~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16f02e145e3185d36aa2d8036975f0599d29bc76;p=thirdparty%2Fiproute2.git 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 --- diff --git a/lib/libnetlink.c b/lib/libnetlink.c index f26295929..04201cdc7 100644 --- a/lib/libnetlink.c +++ b/lib/libnetlink.c @@ -194,6 +194,7 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth, .msg_iovlen = 1, }; char buf[16384]; + int dump_intr = 0; iov.iov_base = buf; while (1) { @@ -230,6 +231,9 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth, h->nlmsg_seq != rth->dump) goto skip_it; + if (h->nlmsg_flags & NLM_F_DUMP_INTR) + dump_intr = 1; + if (h->nlmsg_type == NLMSG_DONE) { found_done = 1; 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; + } if (msg.msg_flags & MSG_TRUNC) { fprintf(stderr, "Message truncated\n");