-/* @(#) $Header: /tcpdump/master/tcpdump/ospf.h,v 1.22 2007-09-27 10:24:21 hannes Exp $ (LBL) */
+/* @(#) $Header: /tcpdump/master/tcpdump/ospf.h,v 1.23 2007-10-08 07:53:21 hannes Exp $ (LBL) */
/*
* Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
* The Regents of the University of California. All rights reserved.
#define OSPF_AUTH_MD5_LEN 16 /* length of MD5 authentication */
/* db_flags */
-#define OSPF_DB_INIT 0x04 /* */
+#define OSPF_DB_INIT 0x04
#define OSPF_DB_MORE 0x02
-#define OSPF_DB_MASTER 0x01
-#define OSPF_DB_RESYNC 0x08 /* RFC4811 */
+#define OSPF_DB_MASTER 0x01
+#define OSPF_DB_RESYNC 0x08 /* RFC4811 */
/* ls_type */
#define LS_TYPE_ROUTER 1 /* router link */
#define MCLA_VERTEX_NETWORK 2
/* Link-Local-Signaling */
-#define OSPF_LLS_EO 1 /* RFC4811, RFC4812 */
-#define OSPF_LLS_MD5 2 /* RFC4813 */
+#define OSPF_LLS_EO 1 /* RFC4811, RFC4812 */
+#define OSPF_LLS_MD5 2 /* RFC4813 */
#define OSPF_LLS_EO_LR 0x00000001 /* RFC4811 */
#define OSPF_LLS_EO_RS 0x00000002 /* RFC4812 */
*/
struct tos_metric {
u_int8_t tos_type;
- u_int8_t tos_count;
+ u_int8_t reserved;
u_int8_t tos_metric[2];
};
+struct tos_link {
+ u_int8_t link_type;
+ u_int8_t link_tos_count;
+ u_int8_t tos_metric[2];
+};
+union un_tos {
+ struct tos_link link;
+ struct tos_metric metrics;
+};
/* link state advertisement header */
struct lsa_hdr {
struct rlalink {
struct in_addr link_id;
struct in_addr link_data;
- struct tos_metric metrics;
+ union un_tos un_tos;
} rla_link[1]; /* may repeat */
} un_rla;
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.65 2007-09-27 10:29:18 hannes Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.66 2007-10-08 07:53:21 hannes Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
{ OSPF_OPTION_E, "External" },
{ OSPF_OPTION_MC, "Multicast" },
{ OSPF_OPTION_NP, "NSSA" },
- { OSPF_OPTION_L, "LLS" },
+ { OSPF_OPTION_L, "LLS" },
{ OSPF_OPTION_DC, "Demand Circuit" },
{ OSPF_OPTION_O, "Opaque" },
{ OSPF_OPTION_DN, "Up/Down" },
* Print all the per-topology metrics.
*/
static void
-ospf_print_tos_metrics(const struct tos_metric *metrics)
+ospf_print_tos_metrics(const union un_tos *tos)
{
int metric_count;
int toscount;
- toscount = metrics->tos_count+1;
+ toscount = tos->link.link_tos_count+1;
metric_count = 0;
/*
while (toscount) {
printf("\n\t\ttopology %s(%u), metric %u",
tok2str(ospf_topology_values, "",
- metric_count ? metrics->tos_type : 0),
- metric_count ? metrics->tos_type : 0,
- EXTRACT_16BITS(&metrics->tos_metric));
+ metric_count ? tos->metrics.tos_type : 0),
+ metric_count ? tos->metrics.tos_type : 0,
+ EXTRACT_16BITS(&tos->metrics.tos_metric));
metric_count++;
- metrics++;
+ tos++;
toscount--;
}
}
rlp = lsap->lsa_un.un_rla.rla_link;
while (j--) {
TCHECK(*rlp);
- switch (rlp->metrics.tos_type) {
+ switch (rlp->un_tos.link.link_type) {
case RLA_TYPE_VIRTUAL:
printf("\n\t Virtual Link: Neighbor Router-ID: %s, Interface Address: %s",
default:
printf("\n\t Unknown Router Link Type (%u)",
- rlp->metrics.tos_type);
+ rlp->un_tos.link.link_type);
return (ls_end);
}
- ospf_print_tos_metrics(&rlp->metrics);
+ ospf_print_tos_metrics(&rlp->un_tos);
rlp = (struct rlalink *)((u_char *)(rlp + 1) +
- ((rlp->metrics.tos_count) * sizeof(struct tos_metric)));
+ ((rlp->un_tos.link.link_tos_count) * sizeof(union un_tos)));
}
break;
static int
ospf_decode_lls(register const struct ospfhdr *op,
- register u_int length)
+ register u_int length)
{
register const u_char *dptr;
register const u_char *dataend;
/* Print all the LS adv's */
lshp = op->ospf_db.db_lshdr;
- while ((u_char *)lshp < dataend && ospf_print_lshdr(lshp) != -1) {
+ while (((u_char *)lshp < dataend) && ospf_print_lshdr(lshp) != -1) {
++lshp;
}
break;