sd-dhcp-client: rebind raw socket when resetting transaction id
authorTom Gundersen <teg@jklm.no>
Fri, 11 Apr 2014 16:02:54 +0000 (18:02 +0200)
committerTom Gundersen <teg@jklm.no>
Fri, 11 Apr 2014 16:02:54 +0000 (18:02 +0200)
As we are now filtering the raw socket based on the transaction id, we must
reset the BPF when we reset the transaction id.

src/libsystemd-network/sd-dhcp-client.c

index afad776..4be37a2 100644 (file)
@@ -473,7 +473,13 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec,
                 /* start over as we did not receive a timely ack or nak */
                 client->state = DHCP_STATE_INIT;
                 client->attempt = 1;
+
+                client->fd = safe_close(client->fd);
                 client->xid = random_u32();
+                r = dhcp_network_bind_raw_socket(client->index, &client->link, client->xid);
+                if (r < 0)
+                        goto error;
+                client->fd = r;
 
                 /* fall through */
         case DHCP_STATE_INIT: