- switch (vqp_common_header->msg_type) {
- case VQP_OBJ_REQ_JOIN_PORT:
- vqp_tlv.reqjoinport = (const struct vqp_tlv_reqjoinport_t *)tptr;
- vqp_obj_type = EXTRACT_32BITS(vqp_tlv.reqjoinport->obj_type);
- vqp_obj_len = EXTRACT_16BITS(vqp_tlv.reqjoinport->obj_length);
- tptr+=sizeof(struct vqp_tlv_reqjoinport_t);
- tlen-=sizeof(struct vqp_tlv_reqjoinport_t);
- break;
- case VQP_OBJ_RESP_VLAN:
- vqp_tlv.respvlan = (const struct vqp_tlv_respvlan_t *)tptr;
- vqp_obj_type = EXTRACT_32BITS(vqp_tlv.respvlan->obj_type);
- vqp_obj_len = EXTRACT_16BITS(vqp_tlv.respvlan->obj_length);
- tptr+=sizeof(struct vqp_tlv_respvlan_t);
- tlen-=sizeof(struct vqp_tlv_respvlan_t);
- break;
- default:
- /* bail - don't know the TLV format of the message type */
- return;
- }
-
- /* did we capture enough for fully decoding the object ? */
- if (!TTEST2(*tptr, vqp_obj_len))
+ vqp_obj_tlv = (const struct vqp_obj_tlv_t *)tptr;
+ ND_TCHECK(*vqp_obj_tlv);
+ if (sizeof(struct vqp_obj_tlv_t) > tlen)