memset(&addr, 0, sizeof(addr));
plenbytes = (plen + 7) / 8;
- ND_TCHECK_LEN(pptr + 1, plenbytes);
ITEMCHECK(plenbytes);
- memcpy(&addr, pptr + 1, plenbytes);
+ GET_CPY_BYTES(&addr, pptr + 1, plenbytes);
if (plen % 8) {
((u_char *)&addr)[plenbytes - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
}
snprintf(buf, buflen, "%s/%u", ipaddr_string(ndo, (const u_char *)&addr), plen);
return 1 + plenbytes;
-trunc:
- return -2;
-
badtlv:
- return -3;
+ return -2;
}
static int
memset(&addr, 0, sizeof(addr));
plenbytes = (plen + 7) / 8;
- ND_TCHECK_LEN(pptr + 4, plenbytes);
ITEMCHECK(plenbytes);
- memcpy(&addr, pptr + 4, plenbytes);
+ GET_CPY_BYTES(&addr, pptr + 4, plenbytes);
if (plen % 8) {
((u_char *)&addr)[plenbytes - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
}
/*
* bgp_vpn_ip_print
*
- * print an ipv4 or ipv6 address into a buffer dependend on address length.
+ * print an ipv4 or ipv6 address into a buffer dependent on address length.
*/
static char *
bgp_vpn_ip_print(netdissect_options *ndo,
switch(addr_length) {
case (sizeof(nd_ipv4) << 3): /* 32 */
- ND_TCHECK_LEN(pptr, sizeof(nd_ipv4));
snprintf(pos, sizeof(addr), "%s", GET_IPADDR_STRING(pptr));
break;
case (sizeof(nd_ipv6) << 3): /* 128 */
- ND_TCHECK_LEN(pptr, sizeof(nd_ipv6));
snprintf(pos, sizeof(addr), "%s", GET_IP6ADDR_STRING(pptr));
break;
default:
}
pos += strlen(pos);
-trunc:
*(pos) = '\0';
return (addr);
}
*/
memset(&route_target, 0, sizeof(route_target));
num_octets = (plen + 7) / 8;
- ND_TCHECK_LEN(pptr + 5, num_octets);
- memcpy(&route_target, pptr + 5, num_octets);
+ GET_CPY_BYTES(&route_target, pptr + 5, num_octets);
/* If mask-len is not on octet boundary, ensure all extra bits are 0 */
if (plen % 8) {
((u_char *)&route_target)[num_octets - 1] &=
bgp_rt_prefix_print(ndo, (u_char *)&route_target, plen));
return 5 + num_octets;
-trunc:
- return -2;
}
static int
return -1;
memset(&addr, 0, sizeof(addr));
- ND_TCHECK_LEN(pptr + 12, (plen + 7) / 8);
- memcpy(&addr, pptr + 12, (plen + 7) / 8);
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
if (plen % 8) {
((u_char *)&addr)[(plen + 7) / 8 - 1] &=
((0xff00 >> (plen % 8)) & 0xff);
((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
return 12 + (plen + 7) / 8;
-
-trunc:
- return -2;
}
/*
pptr += 8;
/* IPv4 address */
- ND_TCHECK_LEN(pptr, sizeof(nd_ipv4));
vpn_ip = pptr;
pptr += sizeof(nd_ipv4);
/* MDT Group Address */
- ND_TCHECK_LEN(pptr, sizeof(nd_ipv4));
-
snprintf(buf, buflen, "RD: %s, VPN IP Address: %s, MC Group Address: %s",
bgp_vpn_rd_print(ndo, rd), GET_IPADDR_STRING(vpn_ip), GET_IPADDR_STRING(pptr));
u_int addr_length, sg_length;
u_int offset;
- ND_TCHECK_2(pptr);
route_type = GET_U_1(pptr);
pptr++;
route_length = GET_U_1(pptr);
}
return plen + 2;
}
- ND_TCHECK_3(pptr);
tlv_type = GET_U_1(pptr);
pptr++;
tlv_len = GET_BE_U_2(pptr); /* length, in *bits* */
memset(&addr, 0, sizeof(addr));
plenbytes = (plen + 7) / 8;
- ND_TCHECK_LEN(pd + 1, plenbytes);
ITEMCHECK(plenbytes);
- memcpy(&addr, pd + 1, plenbytes);
+ GET_CPY_BYTES(&addr, pd + 1, plenbytes);
if (plen % 8) {
addr[plenbytes - 1] &=
((0xff00 >> (plen % 8)) & 0xff);
snprintf(buf, buflen, "%s/%u", ip6addr_string(ndo, (const u_char *)&addr), plen);
return 1 + plenbytes;
-trunc:
- return -2;
-
badtlv:
- return -3;
+ return -2;
}
static int
memset(&addr, 0, sizeof(addr));
plenbytes = (plen + 7) / 8;
- ND_TCHECK_LEN(pptr + 4, plenbytes);
- memcpy(&addr, pptr + 4, plenbytes);
+ GET_CPY_BYTES(&addr, pptr + 4, plenbytes);
if (plen % 8) {
addr[plenbytes - 1] &=
((0xff00 >> (plen % 8)) & 0xff);
return -1;
memset(&addr, 0, sizeof(addr));
- ND_TCHECK_LEN(pptr + 12, (plen + 7) / 8);
- memcpy(&addr, pptr + 12, (plen + 7) / 8);
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
if (plen % 8) {
addr[(plen + 7) / 8 - 1] &=
((0xff00 >> (plen % 8)) & 0xff);
((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
return 12 + (plen + 7) / 8;
-
-trunc:
- return -2;
}
static int
return -1;
memset(&addr, 0, sizeof(addr));
- ND_TCHECK_LEN(pptr + 4, (plen + 7) / 8);
- memcpy(&addr, pptr + 4, (plen + 7) / 8);
+ GET_CPY_BYTES(&addr, pptr + 4, (plen + 7) / 8);
if (plen % 8) {
addr[(plen + 7) / 8 - 1] &=
((0xff00 >> (plen % 8)) & 0xff);
}
+ /* Cannot use GET_ISONSAP_STRING (not packet buffer pointer) */
snprintf(buf, buflen, "%s/%u",
isonsap_string(ndo, addr,(plen + 7) / 8),
plen);
return 1 + (plen + 7) / 8;
-
-trunc:
- return -2;
}
static int
return -1;
memset(&addr, 0, sizeof(addr));
- ND_TCHECK_LEN(pptr + 12, (plen + 7) / 8);
- memcpy(&addr, pptr + 12, (plen + 7) / 8);
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
if (plen % 8) {
addr[(plen + 7) / 8 - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
}
/* the label may get offsetted by 4 bits so lets shift it right */
+ /* Cannot use GET_ISONSAP_STRING (not packet buffer pointer) */
snprintf(buf, buflen, "RD: %s, %s/%u, label:%u %s",
bgp_vpn_rd_print(ndo, pptr+4),
isonsap_string(ndo, addr,(plen + 7) / 8),
((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
return 12 + (plen + 7) / 8;
-
-trunc:
- return -2;
}
/*
* each.
*/
while (tptr < pptr + len) {
- ND_TCHECK_1(tptr);
-
/*
* If we do not find a valid segment type, our guess might be wrong.
*/
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
else if (advance == -2)
- goto trunc;
- else if (advance == -3)
break; /* bytes left, but not enough */
else
ND_PRINT("\n\t %s", buf);
advance = decode_labeled_vpn_prefix4(ndo, tptr, buf, buflen);
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
- else if (advance == -2)
- goto trunc;
else
ND_PRINT("\n\t %s", buf);
break;
case (AFNUM_INET<<8 | SAFNUM_RT_ROUTING_INFO):
advance = decode_rt_routing_info(ndo, tptr);
- if (advance == -2)
- goto trunc;
break;
case (AFNUM_INET<<8 | SAFNUM_MULTICAST_VPN): /* fall through */
case (AFNUM_INET6<<8 | SAFNUM_MULTICAST_VPN):
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
else if (advance == -2)
- goto trunc;
- else if (advance == -3)
break; /* bytes left, but not enough */
else
ND_PRINT("\n\t %s", buf);
advance = decode_labeled_vpn_prefix6(ndo, tptr, buf, buflen);
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
- else if (advance == -2)
- goto trunc;
else
ND_PRINT("\n\t %s", buf);
break;
advance = decode_clnp_prefix(ndo, tptr, buf, buflen);
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
- else if (advance == -2)
- goto trunc;
else
ND_PRINT("\n\t %s", buf);
break;
advance = decode_labeled_vpn_clnp_prefix(ndo, tptr, buf, buflen);
if (advance == -1)
ND_PRINT("\n\t (illegal prefix length)");
- else if (advance == -2)
- goto trunc;
else
ND_PRINT("\n\t %s", buf);
break;
if (len != 4)
ND_PRINT("invalid len");
else {
- ND_TCHECK_4(tptr);
ND_PRINT("%s", GET_IPADDR_STRING(tptr));
}
break;
ND_PRINT("invalid len");
break;
}
- ND_TCHECK_8(tptr);
ND_PRINT(" AS #%s, origin %s",
as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(tptr)),
GET_IPADDR_STRING(tptr + 4));
ND_PRINT("invalid len");
break;
}
- ND_TCHECK_4(tptr);
ND_PRINT("%s",GET_IPADDR_STRING(tptr));
break;
case BGPTYPE_CLUSTER_LIST:
break;
}
while (tlen != 0) {
- ND_TCHECK_4(tptr);
if (tlen < 4)
goto trunc;
ND_PRINT("%s%s",
tlen -= tnhlen;
tnhlen = 0;
} else {
- ND_TCHECK_LEN(tptr, sizeof(nd_ipv4));
ND_PRINT("%s",GET_IPADDR_STRING(tptr));
tptr += sizeof(nd_ipv4);
tnhlen -= sizeof(nd_ipv4);
tlen -= tnhlen;
tnhlen = 0;
} else {
- ND_TCHECK_LEN(tptr,
- sizeof(nd_ipv4) + BGP_VPN_RD_LEN);
ND_PRINT("RD: %s, %s",
bgp_vpn_rd_print(ndo, tptr),
GET_IPADDR_STRING(tptr+BGP_VPN_RD_LEN));
tlen -= tnhlen;
tnhlen = 0;
} else {
- ND_TCHECK_LEN(tptr, sizeof(nd_ipv6));
ND_PRINT("%s", GET_IP6ADDR_STRING(tptr));
tptr += sizeof(nd_ipv6);
tlen -= sizeof(nd_ipv6);
tlen -= tnhlen;
tnhlen = 0;
} else {
- ND_TCHECK_LEN(tptr,
- sizeof(nd_ipv6) + BGP_VPN_RD_LEN);
ND_PRINT("RD: %s, %s",
bgp_vpn_rd_print(ndo, tptr),
GET_IP6ADDR_STRING(tptr+BGP_VPN_RD_LEN));
tlen -= tnhlen;
tnhlen = 0;
} else {
- ND_TCHECK_LEN(tptr, sizeof(nd_ipv4));
ND_PRINT("%s", GET_IPADDR_STRING(tptr));
tptr += (sizeof(nd_ipv4));
tlen -= (sizeof(nd_ipv4));
case (AFNUM_NSAP<<8 | SAFNUM_UNICAST):
case (AFNUM_NSAP<<8 | SAFNUM_MULTICAST):
case (AFNUM_NSAP<<8 | SAFNUM_UNIMULTICAST):
- ND_TCHECK_LEN(tptr, tnhlen);
ND_PRINT("%s", GET_ISONSAP_STRING(tptr, tnhlen));
tptr += tnhlen;
tlen -= tnhlen;
switch (tunnel_type) {
case BGP_PMSI_TUNNEL_PIM_SM: /* fall through */
case BGP_PMSI_TUNNEL_PIM_BIDIR:
- ND_TCHECK_8(tptr);
ND_PRINT("\n\t Sender %s, P-Group %s",
GET_IPADDR_STRING(tptr),
GET_IPADDR_STRING(tptr+4));
break;
case BGP_PMSI_TUNNEL_PIM_SSM:
- ND_TCHECK_8(tptr);
ND_PRINT("\n\t Root-Node %s, P-Group %s",
GET_IPADDR_STRING(tptr),
GET_IPADDR_STRING(tptr+4));
break;
case BGP_PMSI_TUNNEL_INGRESS:
- ND_TCHECK_4(tptr);
ND_PRINT("\n\t Tunnel-Endpoint %s",
GET_IPADDR_STRING(tptr));
break;
case BGP_PMSI_TUNNEL_LDP_P2MP: /* fall through */
case BGP_PMSI_TUNNEL_LDP_MP2MP:
- ND_TCHECK_8(tptr);
ND_PRINT("\n\t Root-Node %s, LSP-ID 0x%08x",
GET_IPADDR_STRING(tptr),
GET_BE_U_4(tptr + 4));
break;
case BGP_PMSI_TUNNEL_RSVP_P2MP:
- ND_TCHECK_8(tptr);
ND_PRINT("\n\t Extended-Tunnel-ID %s, P2MP-ID 0x%08x",
GET_IPADDR_STRING(tptr),
GET_BE_U_4(tptr + 4));
uint16_t length;
while (tlen >= 3) {
-
- ND_TCHECK_3(tptr);
-
type = GET_U_1(tptr);
length = GET_BE_U_2(tptr + 1);
tptr += 3;
}
ND_PRINT("\n\t ");
while (len != 0) {
- ND_TCHECK_LEN(tptr, 12);
ND_PRINT("%u:%u:%u%s",
GET_BE_U_4(tptr),
GET_BE_U_4(tptr + 4),
ND_PRINT("\n\t (illegal prefix length)");
break;
} else if (wpfx == -2)
- goto trunc;
- else if (wpfx == -3)
goto trunc; /* bytes left, but not enough */
else {
ND_PRINT("\n\t %s", buf);
ND_PRINT("\n\t (illegal prefix length)");
break;
} else if (i == -2)
- goto trunc;
- else if (i == -3)
goto trunc; /* bytes left, but not enough */
else {
ND_PRINT("\n\t %s", buf);
*/
if(bgpn_minor == BGP_NOTIFY_MINOR_CEASE_MAXPRFX && length >= BGP_NOTIFICATION_SIZE + 7) {
tptr = dat + BGP_NOTIFICATION_SIZE;
- ND_TCHECK_7(tptr);
ND_PRINT(", AFI %s (%u), SAFI %s (%u), Max Prefixes: %u",
tok2str(af_values, "Unknown", GET_BE_U_2(tptr)),
GET_BE_U_2(tptr),
else {
ND_TCHECK_LEN(tptr + 1, shutdown_comm_length);
ND_PRINT(", Shutdown Communication (length: %u): \"", shutdown_comm_length);
- (void)nd_printn(ndo, tptr+1, shutdown_comm_length, NULL);
+ nd_printjn(ndo, tptr+1, shutdown_comm_length);
ND_PRINT("\"");
remainder_offset += shutdown_comm_length + 1;
}