dhcp: put option 53 at the beginning
... unless it is listed in 55. Many clients expect option 53 at the beginning. mTCP has this code: if ( resp->options[0] != 53 ) { TRACE_WARN(( "Dhcp: first option was not a Dhcp msg type\n" )); return; } wattcp32 has this: static int DHCP_is_ack (void) { const BYTE *opt = (const BYTE*) &dhcp_in.dh_opt[4]; return (opt[0] == DHCP_OPT_MSG_TYPE && opt[1] == 1 && opt[2] == DHCP_ACK); } static int DHCP_is_nack (void) { const BYTE *opt = (const BYTE*) &dhcp_in.dh_opt[4]; return (opt[0] == DHCP_OPT_MSG_TYPE && opt[1] == 1 && opt[2] == DHCP_NAK); } Link: https://bugs.passt.top/show_bug.cgi?id=77 Signed-off-by: Stas Sergeev <stsp2@yandex.ru> [sbrivio: s/options 53/option 53/ and s/other/others/ in comment] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
a469fc393f
commit
f851084c96
1 changed files with 7 additions and 0 deletions
7
dhcp.c
7
dhcp.c
|
@ -149,6 +149,13 @@ static int fill(struct msg *m)
|
|||
for (o = 0; o < 255; o++)
|
||||
opts[o].sent = 0;
|
||||
|
||||
/* Some clients (wattcp32, mTCP, maybe some others) expect
|
||||
* option 53 at the beginning of the list.
|
||||
* Put it there explicitly, unless requested via option 55.
|
||||
*/
|
||||
if (!memchr(opts[55].c, 53, opts[55].clen))
|
||||
fill_one(m, 53, &offset);
|
||||
|
||||
for (i = 0; i < opts[55].clen; i++) {
|
||||
o = opts[55].c[i];
|
||||
if (opts[o].slen)
|
||||
|
|
Loading…
Reference in a new issue