goto trunc;
opttype = EXTRACT_BE_U_2(&dh6o->dh6opt_type);
ND_PRINT((ndo, " (%s", tok2str(dh6opt_str, "opt_%u", opttype)));
- ND_TCHECK2(*(cp + sizeof(*dh6o)), optlen);
+ ND_TCHECK_LEN(cp + sizeof(*dh6o), optlen);
switch (opttype) {
case DH6OPT_CLIENTID:
case DH6OPT_SERVERID:
{
const struct dhcp6 *dh6;
const struct dhcp6_relay *dh6relay;
+ uint8_t msgtype;
const u_char *ep;
const u_char *extp;
const char *name;
dh6 = (const struct dhcp6 *)cp;
dh6relay = (const struct dhcp6_relay *)cp;
ND_TCHECK(dh6->dh6_xid);
- name = tok2str(dh6_msgtype_str, "msgtype-%u", dh6->dh6_msgtype);
+ msgtype = EXTRACT_U_1(dh6->dh6_msgtype);
+ name = tok2str(dh6_msgtype_str, "msgtype-%u", msgtype);
if (!ndo->ndo_vflag) {
ND_PRINT((ndo, " %s", name));
/* XXX relay agent messages have to be handled differently */
ND_PRINT((ndo, " %s (", name)); /*)*/
- if (dh6->dh6_msgtype != DH6_RELAY_FORW &&
- dh6->dh6_msgtype != DH6_RELAY_REPLY) {
- ND_PRINT((ndo, "xid=%x", EXTRACT_BE_U_4(&dh6->dh6_xid) & DH6_XIDMASK));
+ if (msgtype != DH6_RELAY_FORW && msgtype != DH6_RELAY_REPLY) {
+ ND_PRINT((ndo, "xid=%x", EXTRACT_BE_U_4(dh6->dh6_xid) & DH6_XIDMASK));
extp = (const u_char *)(dh6 + 1);
dhcp6opt_print(ndo, extp, ep);
} else { /* relay messages */