本文整理汇总了C++中ND_TCHECK2函数的典型用法代码示例。如果您正苦于以下问题:C++ ND_TCHECK2函数的具体用法?C++ ND_TCHECK2怎么用?C++ ND_TCHECK2使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ND_TCHECK2函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: print_neighbors2
static int
print_neighbors2(netdissect_options *ndo,
register const u_char *bp, register const u_char *ep,
register u_int len)
{
const u_char *laddr;
register u_char metric, thresh, flags;
register int ncount;
ND_PRINT((ndo, " (v %d.%d):",
(int)target_level & 0xff,
(int)(target_level >> 8) & 0xff));
while (len > 0 && bp < ep) {
ND_TCHECK2(bp[0], 8);
laddr = bp;
bp += 4;
metric = *bp++;
thresh = *bp++;
flags = *bp++;
ncount = *bp++;
len -= 8;
while (--ncount >= 0 && (len >= 4) && (bp + 4) <= ep) {
ND_PRINT((ndo, " [%s -> ", ipaddr_string(ndo, laddr)));
ND_PRINT((ndo, "%s (%d/%d", ipaddr_string(ndo, bp),
metric, thresh));
if (flags & DVMRP_NF_TUNNEL)
ND_PRINT((ndo, "/tunnel"));
if (flags & DVMRP_NF_SRCRT)
ND_PRINT((ndo, "/srcrt"));
if (flags & DVMRP_NF_QUERIER)
ND_PRINT((ndo, "/querier"));
if (flags & DVMRP_NF_DISABLED)
ND_PRINT((ndo, "/disabled"));
if (flags & DVMRP_NF_DOWN)
ND_PRINT((ndo, "/down"));
ND_PRINT((ndo, ")]"));
bp += 4;
len -= 4;
}
if (ncount != -1) {
ND_PRINT((ndo, " [|]"));
return (0);
}
}
return (0);
trunc:
return (-1);
}
示例2: ospf6_print_lsaprefix
static int
ospf6_print_lsaprefix(netdissect_options *ndo,
const uint8_t *tptr, u_int lsa_length)
{
const struct lsa6_prefix *lsapp = (const struct lsa6_prefix *)tptr;
u_int wordlen;
struct in6_addr prefix;
if (lsa_length < sizeof (*lsapp) - IPV6_ADDR_LEN_BYTES)
goto trunc;
lsa_length -= sizeof (*lsapp) - IPV6_ADDR_LEN_BYTES;
ND_TCHECK2(*lsapp, sizeof (*lsapp) - IPV6_ADDR_LEN_BYTES);
wordlen = (lsapp->lsa_p_len + 31) / 32;
if (wordlen * 4 > sizeof(struct in6_addr)) {
ND_PRINT((ndo, " bogus prefixlen /%d", lsapp->lsa_p_len));
goto trunc;
}
if (lsa_length < wordlen * 4)
goto trunc;
lsa_length -= wordlen * 4;
ND_TCHECK2(lsapp->lsa_p_prefix, wordlen * 4);
memset(&prefix, 0, sizeof(prefix));
memcpy(&prefix, lsapp->lsa_p_prefix, wordlen * 4);
ND_PRINT((ndo, "\n\t\t%s/%d", ip6addr_string(ndo, &prefix),
lsapp->lsa_p_len));
if (lsapp->lsa_p_opt) {
ND_PRINT((ndo, ", Options [%s]",
bittok2str(ospf6_lsa_prefix_option_values,
"none", lsapp->lsa_p_opt)));
}
ND_PRINT((ndo, ", metric %u", EXTRACT_16BITS(&lsapp->lsa_p_metric)));
return sizeof(*lsapp) - IPV6_ADDR_LEN_BYTES + wordlen * 4;
trunc:
return -1;
}
示例3: m3ua_tags_print
/*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Parameter Tag | Parameter Length |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* \ \
* / Parameter Value /
* \ \
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
static void
m3ua_tags_print(netdissect_options *ndo,
const u_char *buf, const u_int size)
{
const u_char *p = buf;
int align;
uint16_t hdr_tag;
uint16_t hdr_len;
while (p < buf + size) {
if (p + sizeof(struct m3ua_param_header) > buf + size)
goto corrupt;
ND_TCHECK2(*p, sizeof(struct m3ua_param_header));
/* Parameter Tag */
hdr_tag = EXTRACT_16BITS(p);
ND_PRINT((ndo, "\n\t\t\t%s: ", tok2str(ParamName, "Unknown Parameter (0x%04x)", hdr_tag)));
/* Parameter Length */
hdr_len = EXTRACT_16BITS(p + 2);
if (hdr_len < sizeof(struct m3ua_param_header))
goto corrupt;
/* Parameter Value */
align = (p + hdr_len - buf) % 4;
align = align ? 4 - align : 0;
ND_TCHECK2(*p, hdr_len + align);
tag_value_print(ndo, p, hdr_tag, hdr_len - sizeof(struct m3ua_param_header));
p += hdr_len + align;
}
return;
corrupt:
ND_PRINT((ndo, "%s", cstr));
ND_TCHECK2(*buf, size);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例4: aoev1_print
/* cp points to the Ver/Flags octet */
static void
aoev1_print(netdissect_options *ndo,
const u_char *cp, const u_int len)
{
const u_char *ep = cp + len;
uint8_t flags, command;
void (*cmd_decoder)(netdissect_options *, const u_char *, const u_int);
if (len < AOEV1_COMMON_HDR_LEN)
goto invalid;
/* Flags */
flags = *cp & 0x0F;
ND_PRINT((ndo, ", Flags: [%s]", bittok2str(aoev1_flag_str, "none", flags)));
cp += 1;
if (! ndo->ndo_vflag)
return;
/* Error */
ND_TCHECK2(*cp, 1);
if (flags & AOEV1_FLAG_E)
ND_PRINT((ndo, "\n\tError: %s", tok2str(aoev1_errcode_str, "Invalid (%u)", *cp)));
cp += 1;
/* Major */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, "\n\tMajor: 0x%04x", EXTRACT_16BITS(cp)));
cp += 2;
/* Minor */
ND_TCHECK2(*cp, 1);
ND_PRINT((ndo, ", Minor: 0x%02x", *cp));
cp += 1;
/* Command */
ND_TCHECK2(*cp, 1);
command = *cp;
cp += 1;
ND_PRINT((ndo, ", Command: %s", tok2str(cmdcode_str, "Unknown (0x%02x)", command)));
/* Tag */
ND_TCHECK2(*cp, 4);
ND_PRINT((ndo, ", Tag: 0x%08x", EXTRACT_32BITS(cp)));
cp += 4;
/* Arg */
cmd_decoder =
command == AOEV1_CMD_ISSUE_ATA_COMMAND ? aoev1_issue_print :
command == AOEV1_CMD_QUERY_CONFIG_INFORMATION ? aoev1_query_print :
command == AOEV1_CMD_MAC_MASK_LIST ? aoev1_mac_print :
command == AOEV1_CMD_RESERVE_RELEASE ? aoev1_reserve_print :
NULL;
if (cmd_decoder != NULL)
cmd_decoder(ndo, cp, len - AOEV1_COMMON_HDR_LEN);
return;
invalid:
ND_PRINT((ndo, "%s", istr));
ND_TCHECK2(*cp, ep - cp);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例5: loopback_message_print
static void
loopback_message_print(netdissect_options *ndo, const u_char *cp, const u_int len)
{
const u_char *ep = cp + len;
uint16_t function;
if (len < 2)
goto corrupt;
/* function */
ND_TCHECK2(*cp, 2);
function = EXTRACT_LE_16BITS(cp);
cp += 2;
ND_PRINT((ndo, ", %s", tok2str(fcode_str, " invalid (%u)", function)));
switch (function) {
case LOOPBACK_REPLY:
if (len < 4)
goto corrupt;
/* receipt number */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, ", receipt number %u", EXTRACT_LE_16BITS(cp)));
cp += 2;
/* data */
ND_PRINT((ndo, ", data (%u octets)", len - 4));
ND_TCHECK2(*cp, len - 4);
break;
case LOOPBACK_FWDDATA:
if (len < 8)
goto corrupt;
/* forwarding address */
ND_TCHECK2(*cp, ETHER_ADDR_LEN);
ND_PRINT((ndo, ", forwarding address %s", etheraddr_string(cp)));
cp += ETHER_ADDR_LEN;
/* data */
ND_PRINT((ndo, ", data (%u octets)", len - 8));
ND_TCHECK2(*cp, len - 8);
break;
default:
ND_TCHECK2(*cp, len - 2);
break;
}
return;
corrupt:
ND_PRINT((ndo, "%s", cstr));
ND_TCHECK2(*cp, ep - cp);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例6: radius_print
void
radius_print(netdissect_options *ndo,
const u_char *dat, u_int length)
{
register const struct radius_hdr *rad;
u_int len, auth_idx;
ND_TCHECK2(*dat, MIN_RADIUS_LEN);
rad = (struct radius_hdr *)dat;
len = EXTRACT_16BITS(&rad->len);
if (len < MIN_RADIUS_LEN)
{
ND_PRINT((ndo, "%s", tstr));
return;
}
if (len > length)
len = length;
if (ndo->ndo_vflag < 1) {
ND_PRINT((ndo, "RADIUS, %s (%u), id: 0x%02x length: %u",
tok2str(radius_command_values,"Unknown Command",rad->code),
rad->code,
rad->id,
len));
return;
}
else {
ND_PRINT((ndo, "RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
len,
tok2str(radius_command_values,"Unknown Command",rad->code),
rad->code,
rad->id));
for(auth_idx=0; auth_idx < 16; auth_idx++)
ND_PRINT((ndo, "%02x", rad->auth[auth_idx]));
}
if (len > MIN_RADIUS_LEN)
radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例7: aoev1_query_print
static void
aoev1_query_print(netdissect_options *ndo,
const u_char *cp, const u_int len)
{
const u_char *ep = cp + len;
uint16_t cslen;
if (len < AOEV1_QUERY_ARG_LEN)
goto invalid;
/* Buffer Count */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, "\n\tBuffer Count: %u", EXTRACT_16BITS(cp)));
cp += 2;
/* Firmware Version */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, ", Firmware Version: %u", EXTRACT_16BITS(cp)));
cp += 2;
/* Sector Count */
ND_TCHECK2(*cp, 1);
ND_PRINT((ndo, ", Sector Count: %u", *cp));
cp += 1;
/* AoE/CCmd */
ND_TCHECK2(*cp, 1);
ND_PRINT((ndo, ", AoE: %u, CCmd: %s", (*cp & 0xF0) >> 4,
tok2str(aoev1_ccmd_str, "Unknown (0x02x)", *cp & 0x0F)));
cp += 1;
/* Config String Length */
ND_TCHECK2(*cp, 2);
cslen = EXTRACT_16BITS(cp);
cp += 2;
if (cslen > AOEV1_MAX_CONFSTR_LEN || AOEV1_QUERY_ARG_LEN + cslen > len)
goto invalid;
/* Config String */
ND_TCHECK2(*cp, cslen);
if (cslen) {
ND_PRINT((ndo, "\n\tConfig String (length %u): ", cslen));
if (fn_printn(ndo, cp, cslen, ndo->ndo_snapend))
goto trunc;
}
return;
invalid:
ND_PRINT((ndo, "%s", istr));
ND_TCHECK2(*cp, ep - cp);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例8: of_header_body_print
/* Print a single OpenFlow message. */
static const u_char *
of_header_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep)
{
uint8_t version, type;
uint16_t length;
uint32_t xid;
if (ep < cp + OF_HEADER_LEN)
goto invalid;
/* version */
ND_TCHECK2(*cp, 1);
version = *cp;
cp += 1;
/* type */
ND_TCHECK2(*cp, 1);
type = *cp;
cp += 1;
/* length */
ND_TCHECK2(*cp, 2);
length = EXTRACT_16BITS(cp);
cp += 2;
/* xid */
ND_TCHECK2(*cp, 4);
xid = EXTRACT_32BITS(cp);
cp += 4;
/* Message length includes the header length and a message always includes
* the basic header. A message length underrun fails decoding of the rest of
* the current packet. At the same time, try decoding as much of the current
* message as possible even when it does not end within the current TCP
* segment. */
if (length < OF_HEADER_LEN) {
of_header_print(ndo, version, type, length, xid);
goto invalid;
}
/* Decode known protocol versions further without printing the header (the
* type decoding is version-specific. */
switch (version) {
case OF_VER_1_0:
return of10_header_body_print(ndo, cp, ep, type, length, xid);
default:
of_header_print(ndo, version, type, length, xid);
ND_TCHECK2(*cp, length - OF_HEADER_LEN);
return cp + length - OF_HEADER_LEN; /* done with current message */
}
invalid: /* fail current packet */
ND_PRINT((ndo, "%s", istr));
ND_TCHECK2(*cp, ep - cp);
return ep;
trunc:
ND_PRINT((ndo, "%s", tstr));
return ep;
}
示例9: parse_pre_op_attr
/*
* Pre operation attributes. Print only if vflag > 1.
*/
static const uint32_t *
parse_pre_op_attr(netdissect_options *ndo,
const uint32_t *dp, int verbose)
{
ND_TCHECK(dp[0]);
if (!EXTRACT_32BITS(&dp[0]))
return (dp + 1);
dp++;
ND_TCHECK2(*dp, 24);
if (verbose > 1) {
return parse_wcc_attr(ndo, dp);
} else {
/* If not verbose enough, just skip over wcc_attr */
return (dp + 6);
}
trunc:
return (NULL);
}
示例10: hbhopt_print
int
hbhopt_print(netdissect_options *ndo, register const u_char *bp)
{
const struct ip6_hbh *dp = (const struct ip6_hbh *)bp;
int hbhlen = 0;
ND_TCHECK(dp->ip6h_len);
hbhlen = (int)((dp->ip6h_len + 1) << 3);
ND_TCHECK2(*dp, hbhlen);
ND_PRINT((ndo, "HBH "));
if (ndo->ndo_vflag)
ip6_opt_print(ndo, (const u_char *)dp + sizeof(*dp), hbhlen - sizeof(*dp));
return(hbhlen);
trunc:
ND_PRINT((ndo, "[|HBH]"));
return(-1);
}
示例11: ospf6_decode_at
/* RFC6506 Section 4.1 */
static int
ospf6_decode_at(netdissect_options *ndo,
const u_char *cp, const u_int len)
{
uint16_t authdatalen;
if (len == 0)
return 0;
if (len < OSPF6_AT_HDRLEN)
goto trunc;
/* Authentication Type */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, "\n\tAuthentication Type %s", tok2str(ospf6_auth_type_str, "unknown (0x%04x)", EXTRACT_16BITS(cp))));
cp += 2;
/* Auth Data Len */
ND_TCHECK2(*cp, 2);
authdatalen = EXTRACT_16BITS(cp);
ND_PRINT((ndo, ", Length %u", authdatalen));
if (authdatalen < OSPF6_AT_HDRLEN || authdatalen > len)
goto trunc;
cp += 2;
/* Reserved */
ND_TCHECK2(*cp, 2);
cp += 2;
/* Security Association ID */
ND_TCHECK2(*cp, 2);
ND_PRINT((ndo, ", SAID %u", EXTRACT_16BITS(cp)));
cp += 2;
/* Cryptographic Sequence Number (High-Order 32 Bits) */
ND_TCHECK2(*cp, 4);
ND_PRINT((ndo, ", CSN 0x%08x", EXTRACT_32BITS(cp)));
cp += 4;
/* Cryptographic Sequence Number (Low-Order 32 Bits) */
ND_TCHECK2(*cp, 4);
ND_PRINT((ndo, ":%08x", EXTRACT_32BITS(cp)));
cp += 4;
/* Authentication Data */
ND_TCHECK2(*cp, authdatalen - OSPF6_AT_HDRLEN);
if (ndo->ndo_vflag > 1)
print_unknown_data(ndo,cp, "\n\tAuthentication Data ", authdatalen - OSPF6_AT_HDRLEN);
return 0;
trunc:
return 1;
}
示例12: zmtp1_print_intermediate_part
static const u_char *
zmtp1_print_intermediate_part(netdissect_options *ndo, const u_char *cp, const u_int len) {
u_int frame_offset;
uint64_t remaining_len;
ND_TCHECK2(*cp, 2);
frame_offset = EXTRACT_16BITS(cp);
ND_PRINT((ndo, "\n\t frame offset 0x%04x", frame_offset));
cp += 2;
remaining_len = ndo->ndo_snapend - cp; /* without the frame length */
if (frame_offset == 0xFFFF)
frame_offset = len - 2; /* always within the declared length */
else if (2 + frame_offset > len) {
ND_PRINT((ndo, " (exceeds datagram declared length)"));
goto trunc;
}
/* offset within declared length of the datagram */
if (frame_offset) {
ND_PRINT((ndo, "\n\t frame intermediate part, %u bytes", frame_offset));
if (frame_offset > remaining_len)
ND_PRINT((ndo, " (%"PRIu64" captured)", remaining_len));
if (ndo->ndo_vflag) {
uint64_t len_printed = min(frame_offset, remaining_len);
if (ndo->ndo_vflag == 1)
len_printed = min(VBYTES, len_printed);
if (len_printed > 1) {
ND_PRINT((ndo, ", first %"PRIu64" byte(s):", len_printed));
hex_and_ascii_print(ndo, "\n\t ", cp, len_printed);
ND_PRINT((ndo, "\n"));
}
}
}
return cp + frame_offset;
trunc:
ND_PRINT((ndo, "%s", tstr));
return cp + len;
}
示例13: dstopt_print
int
dstopt_print(netdissect_options *ndo, register const u_char *bp)
{
const struct ip6_dest *dp = (const struct ip6_dest *)bp;
int dstoptlen = 0;
ND_TCHECK(dp->ip6d_len);
dstoptlen = (int)((dp->ip6d_len + 1) << 3);
ND_TCHECK2(*dp, dstoptlen);
ND_PRINT((ndo, "DSTOPT "));
if (ndo->ndo_vflag) {
ip6_opt_print(ndo, (const u_char *)dp + sizeof(*dp),
dstoptlen - sizeof(*dp));
}
return(dstoptlen);
trunc:
ND_PRINT((ndo, "[|DSTOPT]"));
return(-1);
}
示例14: m3ua_print
/*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Version | Reserved | Message Class | Message Type |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Message Length |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* \ \
* / /
*/
void
m3ua_print(netdissect_options *ndo,
const u_char *buf, const u_int size)
{
const struct m3ua_common_header *hdr = (const struct m3ua_common_header *) buf;
const struct tok *dict;
/* size includes the header */
if (size < sizeof(struct m3ua_common_header))
goto corrupt;
ND_TCHECK(*hdr);
if (hdr->v != M3UA_REL_1_0)
return;
dict =
hdr->msg_class == M3UA_MSGC_MGMT ? MgmtMessages :
hdr->msg_class == M3UA_MSGC_TRANSFER ? TransferMessages :
hdr->msg_class == M3UA_MSGC_SSNM ? SS7Messages :
hdr->msg_class == M3UA_MSGC_ASPSM ? ASPStateMessages :
hdr->msg_class == M3UA_MSGC_ASPTM ? ASPTrafficMessages :
hdr->msg_class == M3UA_MSGC_RKM ? RoutingKeyMgmtMessages :
NULL;
ND_PRINT((ndo, "\n\t\t%s", tok2str(MessageClasses, "Unknown message class %i", hdr->msg_class)));
if (dict != NULL)
ND_PRINT((ndo, " %s Message", tok2str(dict, "Unknown (0x%02x)", hdr->msg_type)));
if (size != EXTRACT_32BITS(&hdr->len))
ND_PRINT((ndo, "\n\t\t\[email protected]@@@@@ Corrupted length %u of message @@@@@@", EXTRACT_32BITS(&hdr->len)));
else
m3ua_tags_print(ndo, buf + sizeof(struct m3ua_common_header), EXTRACT_32BITS(&hdr->len) - sizeof(struct m3ua_common_header));
return;
corrupt:
ND_PRINT((ndo, "%s", cstr));
ND_TCHECK2(*buf, size);
return;
trunc:
ND_PRINT((ndo, "%s", tstr));
}
示例15: lwres_printaddr
static int
lwres_printaddr(netdissect_options *ndo,
lwres_addr_t *ap)
{
uint16_t l;
const char *p;
int i;
ND_TCHECK(ap->length);
l = EXTRACT_16BITS(&ap->length);
/* XXX ap points to packed struct */
p = (const char *)&ap->length + sizeof(ap->length);
ND_TCHECK2(*p, l);
switch (EXTRACT_32BITS(&ap->family)) {
case 1: /* IPv4 */
if (l < 4)
return -1;
ND_PRINT((ndo, " %s", ipaddr_string(ndo, p)));
p += sizeof(struct in_addr);
break;
#ifdef INET6
case 2: /* IPv6 */
if (l < 16)
return -1;
ND_PRINT((ndo, " %s", ip6addr_string(ndo, p)));
p += sizeof(struct in6_addr);
break;
#endif
default:
ND_PRINT((ndo, " %u/", EXTRACT_32BITS(&ap->family)));
for (i = 0; i < l; i++)
ND_PRINT((ndo, "%02x", *p++));
}
return p - (const char *)ap;
trunc:
return -1;
}