]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Set route/netlink seq number correctly.
authorRoy Marples <roy@marples.name>
Tue, 5 Jan 2016 17:09:37 +0000 (17:09 +0000)
committerRoy Marples <roy@marples.name>
Tue, 5 Jan 2016 17:09:37 +0000 (17:09 +0000)
dhcpcd.h
if-bsd.c
if-linux.c

index d198e654335e83fc536e181ddcc055445ab61621..947afe13d9c2fc4a23f5b3ed8f5aa6e808ebf062 100644 (file)
--- a/dhcpcd.h
+++ b/dhcpcd.h
@@ -121,6 +121,7 @@ struct dhcpcd_ctx {
        int pf_link_fd;
 #endif
        int link_fd;
+       int seq;        /* route message sequence no */
 
 #ifdef USE_SIGNALS
        sigset_t sigset;
index 9607faad32bb7ee1e1f8feccba50919821c55438..db1738054a28454fd6fd44c1ee71db4b8dd19940 100644 (file)
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -556,11 +556,11 @@ if_route(unsigned char cmd, const struct rt *rt)
 
        memset(&rtm, 0, sizeof(rtm));
        rtm.hdr.rtm_version = RTM_VERSION;
-       rtm.hdr.rtm_seq = 1;
        rtm.hdr.rtm_type = cmd;
        rtm.hdr.rtm_addrs = RTA_DST;
        rtm.hdr.rtm_flags = RTF_UP;
        rtm.hdr.rtm_pid = getpid();
+       rtm.hdr.rtm_seq = ++rt->iface->ctx->seq;
 #ifdef RTF_PINNED
        if (cmd != RTM_ADD)
                rtm.hdr.rtm_flags |= RTF_PINNED;
@@ -944,10 +944,10 @@ if_route6(unsigned char cmd, const struct rt6 *rt)
 
        memset(&rtm, 0, sizeof(rtm));
        rtm.hdr.rtm_version = RTM_VERSION;
-       rtm.hdr.rtm_seq = 1;
        rtm.hdr.rtm_type = cmd;
        rtm.hdr.rtm_flags = RTF_UP | (int)rt->flags;
        rtm.hdr.rtm_pid = getpid();
+       rtm.hdr.rtm_seq = ++rt->iface->ctx->seq;
 #ifdef RTF_PINNED
        if (rtm.hdr.rtm_type != RTM_ADD)
                rtm.hdr.rtm_flags |= RTF_PINNED;
index 255ee2075bba35369f30af7cf9959489f5cfd4c3..b78f180030f4dd6ecf5081551a045f6341b3a679 100644 (file)
@@ -870,7 +870,6 @@ send_netlink(struct dhcpcd_ctx *ctx, struct interface *ifp,
        struct sockaddr_nl snl;
        struct iovec iov;
        struct msghdr msg;
-       static unsigned int seq;
 
        memset(&snl, 0, sizeof(snl));
        if ((s = _open_link_socket(&snl, protocol)) == -1)
@@ -885,7 +884,7 @@ send_netlink(struct dhcpcd_ctx *ctx, struct interface *ifp,
        msg.msg_iovlen = 1;
        /* Request a reply */
        hdr->nlmsg_flags |= NLM_F_ACK;
-       hdr->nlmsg_seq = ++seq;
+       hdr->nlmsg_seq = ++ctx->seq;
 
        if (sendmsg(s, &msg, 0) != -1)
                r = get_netlink(ctx, ifp, s, 0, callback);