#include "ospf.h"
-static const char tstr[] = " [|ospf2]";
static const struct tok ospf_option_values[] = {
{ OSPF_OPTION_T, "MultiTopology" }, /* draft-ietf-ospf-mt-09 */
};
int
-ospf_print_grace_lsa(netdissect_options *ndo,
+ospf_grace_lsa_print(netdissect_options *ndo,
const u_char *tptr, u_int ls_length)
{
u_int tlv_type, tlv_length;
}
int
-ospf_print_te_lsa(netdissect_options *ndo,
+ospf_te_lsa_print(netdissect_options *ndo,
const u_char *tptr, u_int ls_length)
{
u_int tlv_type, tlv_length, subtlv_type, subtlv_length;
trunc:
return -1;
invalid:
- ND_PRINT("%s", istr);
+ nd_print_invalid(ndo);
return -1;
}
ND_TCHECK_4(lshp->ls_seq); /* XXX - ls_length check checked this */
ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %u",
- ipaddr_string(ndo, &lshp->ls_router),
+ ipaddr_string(ndo, lshp->ls_router),
EXTRACT_BE_U_4(lshp->ls_seq),
EXTRACT_BE_U_2(lshp->ls_age),
ls_length - (u_int)sizeof(struct lsa_hdr));
ND_PRINT("\n\t %s LSA (%u), LSA-ID: %s",
tok2str(lsa_values,"unknown",ls_type),
ls_type,
- ipaddr_string(ndo, &lshp->un_lsa_id.lsa_id));
+ ipaddr_string(ndo, lshp->un_lsa_id.lsa_id));
break;
}
{
const uint8_t *ls_end;
const struct rlalink *rlp;
- const struct in_addr *ap;
+ const nd_ipv4 *ap;
const struct aslametric *almp;
const struct mcla *mcp;
const uint8_t *lp;
ND_TCHECK_2(lsap->lsa_un.un_rla.rla_count);
j = EXTRACT_BE_U_2(lsap->lsa_un.un_rla.rla_count);
- ND_TCHECK(lsap->lsa_un.un_rla.rla_link);
+ ND_TCHECK_SIZE(lsap->lsa_un.un_rla.rla_link);
rlp = lsap->lsa_un.un_rla.rla_link;
while (j--) {
ND_TCHECK_SIZE(rlp);
case RLA_TYPE_VIRTUAL:
ND_PRINT("\n\t Virtual Link: Neighbor Router-ID: %s, Interface Address: %s",
- ipaddr_string(ndo, &rlp->link_id),
- ipaddr_string(ndo, &rlp->link_data));
+ ipaddr_string(ndo, rlp->link_id),
+ ipaddr_string(ndo, rlp->link_data));
break;
case RLA_TYPE_ROUTER:
ND_PRINT("\n\t Neighbor Router-ID: %s, Interface Address: %s",
- ipaddr_string(ndo, &rlp->link_id),
- ipaddr_string(ndo, &rlp->link_data));
+ ipaddr_string(ndo, rlp->link_id),
+ ipaddr_string(ndo, rlp->link_data));
break;
case RLA_TYPE_TRANSIT:
ND_PRINT("\n\t Neighbor Network-ID: %s, Interface Address: %s",
- ipaddr_string(ndo, &rlp->link_id),
- ipaddr_string(ndo, &rlp->link_data));
+ ipaddr_string(ndo, rlp->link_id),
+ ipaddr_string(ndo, rlp->link_data));
break;
case RLA_TYPE_STUB:
ND_PRINT("\n\t Stub Network: %s, Mask: %s",
- ipaddr_string(ndo, &rlp->link_id),
- ipaddr_string(ndo, &rlp->link_data));
+ ipaddr_string(ndo, rlp->link_id),
+ ipaddr_string(ndo, rlp->link_data));
break;
default:
break;
case LS_TYPE_NETWORK:
- ND_TCHECK_4(&lsap->lsa_un.un_nla.nla_mask);
+ ND_TCHECK_4(lsap->lsa_un.un_nla.nla_mask);
ND_PRINT("\n\t Mask %s\n\t Connected Routers:",
- ipaddr_string(ndo, &lsap->lsa_un.un_nla.nla_mask));
+ ipaddr_string(ndo, lsap->lsa_un.un_nla.nla_mask));
ap = lsap->lsa_un.un_nla.nla_router;
while ((const u_char *)ap < ls_end) {
ND_TCHECK_SIZE(ap);
- ND_PRINT("\n\t %s", ipaddr_string(ndo, ap));
+ ND_PRINT("\n\t %s", ipaddr_string(ndo, *ap));
++ap;
}
break;
case LS_TYPE_SUM_IP:
- ND_TCHECK_4(&lsap->lsa_un.un_nla.nla_mask);
+ ND_TCHECK_4(lsap->lsa_un.un_nla.nla_mask);
ND_PRINT("\n\t Mask %s",
- ipaddr_string(ndo, &lsap->lsa_un.un_sla.sla_mask));
- ND_TCHECK(lsap->lsa_un.un_sla.sla_tosmetric);
+ ipaddr_string(ndo, lsap->lsa_un.un_sla.sla_mask));
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
lp = (const uint8_t *)lsap->lsa_un.un_sla.sla_tosmetric;
while (lp < ls_end) {
uint32_t ul;
break;
case LS_TYPE_SUM_ABR:
- ND_TCHECK(lsap->lsa_un.un_sla.sla_tosmetric);
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
lp = (const uint8_t *)lsap->lsa_un.un_sla.sla_tosmetric;
while (lp < ls_end) {
uint32_t ul;
case LS_TYPE_ASE:
case LS_TYPE_NSSA: /* fall through - those LSAs share the same format */
- ND_TCHECK_4(&lsap->lsa_un.un_nla.nla_mask);
+ ND_TCHECK_4(lsap->lsa_un.un_nla.nla_mask);
ND_PRINT("\n\t Mask %s",
- ipaddr_string(ndo, &lsap->lsa_un.un_asla.asla_mask));
+ ipaddr_string(ndo, lsap->lsa_un.un_asla.asla_mask));
- ND_TCHECK(lsap->lsa_un.un_sla.sla_tosmetric);
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
almp = lsap->lsa_un.un_asla.asla_metric;
while ((const u_char *)almp < ls_end) {
uint32_t ul;
else
ND_PRINT(" %u", (ul & ASLA_MASK_METRIC));
- ND_TCHECK_4(&almp->asla_forward);
- if (almp->asla_forward.s_addr) {
- ND_PRINT(", forward %s", ipaddr_string(ndo, &almp->asla_forward));
+ ND_TCHECK_4(almp->asla_forward);
+ if (EXTRACT_IPV4_TO_NETWORK_ORDER(almp->asla_forward) != 0) {
+ ND_PRINT(", forward %s", ipaddr_string(ndo, almp->asla_forward));
}
- ND_TCHECK_4(&almp->asla_tag);
- if (almp->asla_tag.s_addr) {
- ND_PRINT(", tag %s", ipaddr_string(ndo, &almp->asla_tag));
+ ND_TCHECK_4(almp->asla_tag);
+ if (EXTRACT_IPV4_TO_NETWORK_ORDER(almp->asla_tag) != 0) {
+ ND_PRINT(", tag %s", ipaddr_string(ndo, almp->asla_tag));
}
++almp;
}
/* Multicast extensions as of 23 July 1991 */
mcp = lsap->lsa_un.un_mcla;
while ((const u_char *)mcp < ls_end) {
- ND_TCHECK_4(&mcp->mcla_vid);
+ ND_TCHECK_4(mcp->mcla_vid);
switch (EXTRACT_BE_U_4(mcp->mcla_vtype)) {
case MCLA_VERTEX_ROUTER:
ND_PRINT("\n\t Router Router-ID %s",
- ipaddr_string(ndo, &mcp->mcla_vid));
+ ipaddr_string(ndo, mcp->mcla_vid));
break;
case MCLA_VERTEX_NETWORK:
ND_PRINT("\n\t Network Designated Router %s",
- ipaddr_string(ndo, &mcp->mcla_vid));
+ ipaddr_string(ndo, mcp->mcla_vid));
break;
default:
break;
case LS_OPAQUE_TYPE_GRACE:
- if (ospf_print_grace_lsa(ndo, (const u_char *)(lsap->lsa_un.un_grace_tlv),
+ if (ospf_grace_lsa_print(ndo, (const u_char *)(lsap->lsa_un.un_grace_tlv),
ls_length) == -1) {
return(ls_end);
}
break;
case LS_OPAQUE_TYPE_TE:
- if (ospf_print_te_lsa(ndo, (const u_char *)(lsap->lsa_un.un_te_lsa_tlv),
+ if (ospf_te_lsa_print(ndo, (const u_char *)(lsap->lsa_un.un_te_lsa_tlv),
ls_length) == -1) {
return(ls_end);
}
ospf_decode_v2(netdissect_options *ndo,
const struct ospfhdr *op, const u_char *dataend)
{
- const struct in_addr *ap;
+ const nd_ipv4 *ap;
const struct lsr *lsrp;
const struct lsa_hdr *lshp;
const struct lsa *lsap;
ND_PRINT("\n\t Hello Timer %us, Dead Timer %us, Mask %s, Priority %u",
EXTRACT_BE_U_2(op->ospf_hello.hello_helloint),
EXTRACT_BE_U_4(op->ospf_hello.hello_deadint),
- ipaddr_string(ndo, &op->ospf_hello.hello_mask),
+ ipaddr_string(ndo, op->ospf_hello.hello_mask),
EXTRACT_U_1(op->ospf_hello.hello_priority));
- ND_TCHECK_4(&op->ospf_hello.hello_dr);
- if (op->ospf_hello.hello_dr.s_addr != 0)
+ ND_TCHECK_4(op->ospf_hello.hello_dr);
+ if (EXTRACT_IPV4_TO_NETWORK_ORDER(op->ospf_hello.hello_dr) != 0)
ND_PRINT("\n\t Designated Router %s",
- ipaddr_string(ndo, &op->ospf_hello.hello_dr));
+ ipaddr_string(ndo, op->ospf_hello.hello_dr));
- ND_TCHECK_4(&op->ospf_hello.hello_bdr);
- if (op->ospf_hello.hello_bdr.s_addr != 0)
+ ND_TCHECK_4(op->ospf_hello.hello_bdr);
+ if (EXTRACT_IPV4_TO_NETWORK_ORDER(op->ospf_hello.hello_bdr) != 0)
ND_PRINT(", Backup Designated Router %s",
- ipaddr_string(ndo, &op->ospf_hello.hello_bdr));
+ ipaddr_string(ndo, op->ospf_hello.hello_bdr));
ap = op->ospf_hello.hello_neighbor;
if ((const u_char *)ap < dataend)
ND_PRINT("\n\t Neighbor List:");
while ((const u_char *)ap < dataend) {
ND_TCHECK_SIZE(ap);
- ND_PRINT("\n\t %s", ipaddr_string(ndo, ap));
+ ND_PRINT("\n\t %s", ipaddr_string(ndo, *ap));
++ap;
}
break; /* HELLO */
ND_TCHECK_SIZE(lsrp);
ND_PRINT("\n\t Advertising Router: %s, %s LSA (%u)",
- ipaddr_string(ndo, &lsrp->ls_router),
+ ipaddr_string(ndo, lsrp->ls_router),
tok2str(lsa_values,"unknown",EXTRACT_BE_U_4(lsrp->ls_type)),
EXTRACT_BE_U_4(lsrp->ls_type));
break;
default:
ND_PRINT(", LSA-ID: %s",
- ipaddr_string(ndo, &lsrp->un_ls_stateid.ls_stateid));
+ ipaddr_string(ndo, lsrp->un_ls_stateid.ls_stateid));
break;
}
const u_char *dataend;
const char *cp;
+ ndo->ndo_protocol = "ospf2";
op = (const struct ospfhdr *)bp;
/* XXX Before we do anything else, strip off the MD5 trailer */
dataend = bp + length;
}
- ND_TCHECK_4(&op->ospf_routerid);
- ND_PRINT("\n\tRouter-ID %s", ipaddr_string(ndo, &op->ospf_routerid));
+ ND_TCHECK_4(op->ospf_routerid);
+ ND_PRINT("\n\tRouter-ID %s", ipaddr_string(ndo, op->ospf_routerid));
- ND_TCHECK_4(&op->ospf_areaid);
- if (op->ospf_areaid.s_addr != 0)
- ND_PRINT(", Area %s", ipaddr_string(ndo, &op->ospf_areaid));
+ ND_TCHECK_4(op->ospf_areaid);
+ if (EXTRACT_IPV4_TO_NETWORK_ORDER(op->ospf_areaid) != 0)
+ ND_PRINT(", Area %s", ipaddr_string(ndo, op->ospf_areaid));
else
ND_PRINT(", Backbone Area");
case OSPF_AUTH_SIMPLE:
ND_PRINT("\n\tSimple text password: ");
- safeputs(ndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN);
+ (void)nd_printzp(ndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN, NULL);
break;
case OSPF_AUTH_MD5:
return;
trunc:
- ND_PRINT("%s", tstr);
+ nd_print_trunc(ndo);
}