30 # include <netinet/in.h>
60 #define CDP_OVERHEAD 22
68 #define CDPINITHDRSZ (CDP_OVERHEAD+CDP_VERSSZ+CDP_TTLSZ+CDP_CKSUMSZ)
78 #define CDPTLV_TYPESZ 2
80 #define CDPTLV_LENSZ 2
82 #define CDPTLV_TYPELENSZ (CDPTLV_TYPESZ+CDPTLV_LENSZ)
96 const unsigned reqtypes [] = {1};
100 const void* next = NULL;
104 if ((
const void *)((
const unsigned char *)packet+
CDPTLV_TYPELENSZ) > pktend || packet == NULL) {
105 fprintf(stderr,
"BAD1 packet: %p, pktend: %p\n", packet, pktend);
116 ; NULL != tlv_vp && tlv_vp < pktend
121 if ((
const void *)((
const unsigned char *)tlv_vp+
CDPTLV_TYPELENSZ) > pktend) {
126 next = (
const void *)((
const unsigned char *)tlv_vp + length);
129 || (j <
DIMOF(reqtypes) && ttype != reqtypes[j])) {
145 const unsigned char * pkt_uc = pktptr;
156 const unsigned char * pkt_uc = pktptr;
166 const unsigned char * pkt_uc = pktptr;
187 const unsigned char* tlv_uc = tlv_vp;
210 g_return_val_if_fail(tlv_vp < pktend, NULL);
220 gsize len = (
const char *)pktend - (
const char *)pkt;
221 const unsigned char* ret = (
const unsigned char*)pkt;
230 if ((ret +
get_cdptlv_len(ret, pktend)) > (
const unsigned char *)pktend) {
233 return (
const void *)ret;
240 const void* tlv_vpend)
242 const unsigned char* nexttlv;
243 const unsigned char* nextend;
244 if (tlv_vp == NULL) {
247 nexttlv = (
const unsigned char*)tlv_vp +
get_cdptlv_len(tlv_vp, tlv_vpend);
254 return ((
const void *)nextend > tlv_vpend) ? NULL : nexttlv;
263 gconstpointer pktend)
284 gconstpointer pktend)