dhcp: option 61 add missing type field 16/23416/1
authorDave Barach <dave@barachs.net>
Wed, 13 Nov 2019 22:12:47 +0000 (17:12 -0500)
committerDave Barach <dave@barachs.net>
Wed, 13 Nov 2019 22:13:26 +0000 (17:13 -0500)
Apparently some dhcp servers care about it. Also fixed the unit-test.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: If0af70d624f4122b0339f20f84be047053776fe8

src/plugins/dhcp/client.c
src/plugins/dhcp/test/test_dhcp.py

index f38e3fd..105c744 100644 (file)
@@ -658,8 +658,10 @@ send_dhcp_pkt (dhcp_client_main_t * dcm, dhcp_client_t * c,
   if (vec_len (c->client_identifier))
     {
       o->option = 61;
-      o->length = vec_len (c->client_identifier);
-      clib_memcpy (o->data, c->client_identifier,
+      o->length = vec_len (c->client_identifier) + 1;
+      /* Set type to zero, apparently some dhcp servers care */
+      o->data[0] = 0;
+      clib_memcpy (o->data + 1, c->client_identifier,
                   vec_len (c->client_identifier));
       o = (dhcp_option_t *) (((uword) o) + (o->length + 2));
     }
@@ -1172,7 +1174,7 @@ dhcp_client_set_command_fn (vlib_main_t * vm,
   a->is_add = is_add;
   a->sw_if_index = sw_if_index;
   a->hostname = hostname;
-  a->client_identifier = format (0, "vpe 1.0%c", 0);
+  a->client_identifier = format (0, "vpp 1.1%c", 0);
   a->set_broadcast_flag = set_broadcast_flag;
 
   /*
index 6435d7f..14e20c4 100644 (file)
@@ -251,6 +251,7 @@ class TestDHCP(VppTestCase):
         self.verify_dhcp_has_option(pkt, "hostname",
                                     hostname.encode('ascii'))
         if client_id:
+            client_id = '\x00' + client_id
             self.verify_dhcp_has_option(pkt, "client_id",
                                         client_id.encode('ascii'))
         bootp = pkt[BOOTP]