summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ospfd/ospf_apiserver.c2
-rw-r--r--ospfd/ospf_dump.c4
-rw-r--r--ospfd/ospf_ism.c6
-rw-r--r--ospfd/ospf_neighbor.c13
-rw-r--r--ospfd/ospf_neighbor.h8
-rw-r--r--ospfd/ospf_nsm.c6
-rw-r--r--ospfd/ospf_packet.c52
-rw-r--r--ospfd/ospf_vty.c6
-rw-r--r--ospfd/ospfd.c3
9 files changed, 44 insertions, 56 deletions
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 15fd2e5f..bd5c026c 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -2470,7 +2470,7 @@ ospf_apiserver_clients_notify_nsm_change (struct ospf_neighbor *nbr)
ifaddr = nbr->oi->address->u.prefix4;
}
- nbraddr = nbr->address.u.prefix4;
+ nbraddr = nbr->src;
msg = new_msg_nsm_change (0, ifaddr, nbraddr, nbr->router_id, nbr->state);
if (!msg)
diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index e65b2e33..4786a87c 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -215,9 +215,9 @@ ospf_nbr_state_message (struct ospf_neighbor *nbr, char *buf, size_t size)
int state;
struct ospf_interface *oi = nbr->oi;
- if (IPV4_ADDR_SAME (&DR (oi), &nbr->address.u.prefix4))
+ if (IPV4_ADDR_SAME (&DR (oi), &nbr->src))
state = ISM_DR;
- else if (IPV4_ADDR_SAME (&BDR (oi), &nbr->address.u.prefix4))
+ else if (IPV4_ADDR_SAME (&BDR (oi), &nbr->src))
state = ISM_Backup;
else
state = ISM_DROther;
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index e7bdbf2c..2186e894 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -88,7 +88,7 @@ ospf_elect_dr (struct ospf_interface *oi, struct list *el_list)
listnode_add (dr_list, nbr);
/* Preserve neighbor BDR. */
- if (IPV4_ADDR_SAME (&BDR (oi), &nbr->address.u.prefix4))
+ if (IPV4_ADDR_SAME (&BDR (oi), &nbr->src))
bdr = nbr;
}
@@ -100,7 +100,7 @@ ospf_elect_dr (struct ospf_interface *oi, struct list *el_list)
/* Set DR to interface. */
if (dr)
- DR (oi) = dr->address.u.prefix4;
+ DR (oi) = dr->src;
else
DR (oi).s_addr = 0;
@@ -141,7 +141,7 @@ ospf_elect_bdr (struct ospf_interface *oi, struct list *el_list)
/* Set BDR to interface. */
if (bdr)
- BDR (oi) = bdr->address.u.prefix4;
+ BDR (oi) = bdr->src;
else
BDR (oi).s_addr = 0;
diff --git a/ospfd/ospf_neighbor.c b/ospfd/ospf_neighbor.c
index 03efba57..b0517ff4 100644
--- a/ospfd/ospf_neighbor.c
+++ b/ospfd/ospf_neighbor.c
@@ -188,7 +188,6 @@ ospf_nbr_add_self (struct ospf_interface *oi)
struct ospf_neighbor *nbr;
/* Initial state */
- oi->nbr_self->address = *oi->address;
oi->nbr_self->priority = OSPF_IF_PARAM (oi, priority);
oi->nbr_self->router_id = oi->ospf->router_id;
oi->nbr_self->src = oi->address->u.prefix4;
@@ -304,14 +303,13 @@ ospf_nbr_lookup (struct ospf_interface *oi, struct ip *iph,
static struct ospf_neighbor *
ospf_nbr_add (struct ospf_interface *oi, struct ospf_header *ospfh,
- struct prefix *p)
+ struct ip *iph)
{
struct ospf_neighbor *nbr;
nbr = ospf_nbr_new (oi);
nbr->state = NSM_Down;
- nbr->src = p->u.prefix4;
- memcpy (&nbr->address, p, sizeof (struct prefix));
+ nbr->src = iph->ip_src;
nbr->nbr_nbma = NULL;
if (oi->type == OSPF_IFTYPE_NBMA)
@@ -348,7 +346,7 @@ ospf_nbr_add (struct ospf_interface *oi, struct ospf_header *ospfh,
struct ospf_neighbor *
ospf_nbr_get (struct ospf_interface *oi, struct ospf_header *ospfh,
- struct ip *iph, struct prefix *p)
+ struct ip *iph)
{
struct ospf_neighbor *nbr;
@@ -358,14 +356,13 @@ ospf_nbr_get (struct ospf_interface *oi, struct ospf_header *ospfh,
if (oi->type == OSPF_IFTYPE_NBMA && nbr->state == NSM_Attempt)
{
nbr->src = iph->ip_src;
- memcpy (&nbr->address, p, sizeof (struct prefix));
}
}
else
{
- nbr = ospf_nbr_add (oi, ospfh, p);
+ nbr = ospf_nbr_add (oi, ospfh, iph);
}
-
+
nbr->router_id = ospfh->router_id;
return nbr;
diff --git a/ospfd/ospf_neighbor.h b/ospfd/ospf_neighbor.h
index af8fb2c2..70cc7855 100644
--- a/ospfd/ospf_neighbor.h
+++ b/ospfd/ospf_neighbor.h
@@ -37,8 +37,6 @@ struct ospf_neighbor
u_int32_t dd_seqnum; /* DD Sequence Number. */
/* Neighbor Information from Hello. */
- struct prefix address; /* Neighbor Interface Address. */
-
struct in_addr src; /* Src address. */
struct in_addr router_id; /* Router ID. */
u_char options; /* Options. */
@@ -91,8 +89,8 @@ struct ospf_neighbor
};
/* Macros. */
-#define NBR_IS_DR(n) IPV4_ADDR_SAME (&n->address.u.prefix4, &n->d_router)
-#define NBR_IS_BDR(n) IPV4_ADDR_SAME (&n->address.u.prefix4, &n->bd_router)
+#define NBR_IS_DR(n) IPV4_ADDR_SAME (&n->src, &n->d_router)
+#define NBR_IS_BDR(n) IPV4_ADDR_SAME (&n->src, &n->bd_router)
/* Prototypes. */
extern struct ospf_neighbor *ospf_nbr_new (struct ospf_interface *);
@@ -106,7 +104,7 @@ extern int ospf_nbr_count_opaque_capable (struct ospf_interface *);
#endif /* HAVE_OPAQUE_LSA */
extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *,
struct ospf_header *,
- struct ip *, struct prefix *);
+ struct ip *);
extern struct ospf_neighbor *ospf_nbr_lookup (struct ospf_interface *,
struct ip *,
struct ospf_header *);
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index 15fff349..b15efbd6 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -153,8 +153,8 @@ nsm_should_adj (struct ospf_neighbor *nbr)
|| IPV4_ADDR_SAME (&oi->address->u.prefix4, &DR (oi))
|| IPV4_ADDR_SAME (&oi->address->u.prefix4, &BDR (oi))
/* Neighboring Router is the DRouter or the BDRouter. */
- || IPV4_ADDR_SAME (&nbr->address.u.prefix4, &DR (oi))
- || IPV4_ADDR_SAME (&nbr->address.u.prefix4, &BDR (oi)))
+ || IPV4_ADDR_SAME (&nbr->src, &DR (oi))
+ || IPV4_ADDR_SAME (&nbr->src, &BDR (oi)))
return 1;
return 0;
@@ -393,7 +393,7 @@ nsm_kill_nbr (struct ospf_neighbor *nbr)
if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
zlog_debug ("NSM[%s:%s]: Down (PollIntervalTimer scheduled)",
- IF_NAME (nbr->oi), inet_ntoa (nbr->address.u.prefix4));
+ IF_NAME (nbr->oi), inet_ntoa (nbr->src));
}
return 0;
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 22cce7a3..bc00def4 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -745,7 +745,6 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
struct ospf_hello *hello;
struct ospf_neighbor *nbr;
int old_state;
- struct prefix p;
/* increment statistics. */
oi->hello_in++;
@@ -765,20 +764,15 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
return;
}
- /* get neighbor prefix. */
- p.family = AF_INET;
- p.prefixlen = ip_masklen (hello->network_mask);
- p.u.prefix4 = iph->ip_src;
-
/* Compare network mask. */
/* Checking is ignored for Point-to-Point and Virtual link. */
if (oi->type != OSPF_IFTYPE_POINTOPOINT
&& oi->type != OSPF_IFTYPE_VIRTUALLINK)
- if (oi->address->prefixlen != p.prefixlen)
+ if (oi->address->prefixlen != ip_masklen (hello->network_mask))
{
zlog_warn ("Packet %s [Hello:RECV]: NetworkMask mismatch on %s (configured prefix length is %d, but hello packet indicates %d).",
inet_ntoa(ospfh->router_id), IF_NAME(oi),
- (int)oi->address->prefixlen, (int)p.prefixlen);
+ (int)oi->address->prefixlen, (int)ip_masklen (hello->network_mask));
return;
}
@@ -873,7 +867,7 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
}
/* get neighbour struct */
- nbr = ospf_nbr_get (oi, ospfh, iph, &p);
+ nbr = ospf_nbr_get (oi, ospfh, iph);
/* neighbour must be valid, ospf_nbr_get creates if none existed */
assert (nbr);
@@ -924,17 +918,17 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
/* If neighbor itself declares DR and no BDR exists,
cause event BackupSeen */
if (oi->state == ISM_Waiting &&
- IPV4_ADDR_SAME (&nbr->address.u.prefix4, &hello->d_router) &&
+ IPV4_ADDR_SAME (&nbr->src, &hello->d_router) &&
hello->bd_router.s_addr == 0)
{
OSPF_ISM_EVENT_SCHEDULE (oi, ISM_BackupSeen);
goto done;
}
/* had not previously. */
- if ((IPV4_ADDR_SAME (&nbr->address.u.prefix4, &hello->d_router) &&
- IPV4_ADDR_CMP (&nbr->address.u.prefix4, &nbr->d_router)) ||
- (IPV4_ADDR_CMP (&nbr->address.u.prefix4, &hello->d_router) &&
- IPV4_ADDR_SAME (&nbr->address.u.prefix4, &nbr->d_router)))
+ if ((IPV4_ADDR_SAME (&nbr->src, &hello->d_router) &&
+ IPV4_ADDR_CMP (&nbr->src, &nbr->d_router)) ||
+ (IPV4_ADDR_CMP (&nbr->src, &hello->d_router) &&
+ IPV4_ADDR_SAME (&nbr->src, &nbr->d_router)))
{
OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
goto done;
@@ -942,16 +936,16 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
/* neighbor itself declares BDR. */
if (oi->state == ISM_Waiting &&
- IPV4_ADDR_SAME (&nbr->address.u.prefix4, &hello->bd_router))
+ IPV4_ADDR_SAME (&nbr->src, &hello->bd_router))
{
OSPF_ISM_EVENT_SCHEDULE (oi, ISM_BackupSeen);
goto done;
}
/* had not previously. */
- if ((IPV4_ADDR_SAME (&nbr->address.u.prefix4, &hello->bd_router) &&
- IPV4_ADDR_CMP (&nbr->address.u.prefix4, &nbr->bd_router)) ||
- (IPV4_ADDR_CMP (&nbr->address.u.prefix4, &hello->bd_router) &&
- IPV4_ADDR_SAME (&nbr->address.u.prefix4, &nbr->bd_router)))
+ if ((IPV4_ADDR_SAME (&nbr->src, &hello->bd_router) &&
+ IPV4_ADDR_CMP (&nbr->src, &nbr->bd_router)) ||
+ (IPV4_ADDR_CMP (&nbr->src, &hello->bd_router) &&
+ IPV4_ADDR_SAME (&nbr->src, &nbr->bd_router)))
{
OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
goto done;
@@ -1265,7 +1259,7 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh,
CHECK_FLAG (nbr->options, OSPF_OPTION_O) ? "" : "NOT ");
if (! CHECK_FLAG (nbr->options, OSPF_OPTION_O)
- && IPV4_ADDR_SAME (&DR (oi), &nbr->address.u.prefix4))
+ && IPV4_ADDR_SAME (&DR (oi), &nbr->src))
{
zlog_warn ("DR-neighbor[%s] is NOT opaque-capable; "
"Opaque-LSAs cannot be reliably advertised "
@@ -3052,7 +3046,7 @@ ospf_hello_reply_timer (struct thread *thread)
zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (hello-reply timer expire)",
IF_NAME (nbr->oi), inet_ntoa (nbr->router_id));
- ospf_hello_send_sub (nbr->oi, &nbr->address.u.prefix4);
+ ospf_hello_send_sub (nbr->oi, &nbr->src);
return 0;
}
@@ -3097,8 +3091,8 @@ ospf_hello_send (struct ospf_interface *oi)
Designated Router and the Backup Designated Router (if they
exist). */
if (PRIORITY(oi) == 0 &&
- IPV4_ADDR_CMP(&DR(oi), &nbr->address.u.prefix4) &&
- IPV4_ADDR_CMP(&BDR(oi), &nbr->address.u.prefix4))
+ IPV4_ADDR_CMP(&DR(oi), &nbr->src) &&
+ IPV4_ADDR_CMP(&BDR(oi), &nbr->src))
continue;
/* If the router is eligible to become Designated Router, it
@@ -3114,7 +3108,7 @@ ospf_hello_send (struct ospf_interface *oi)
struct ospf_packet *op_dup;
op_dup = ospf_packet_dup(op);
- op_dup->dst = nbr->address.u.prefix4;
+ op_dup->dst = nbr->src;
/* Add packet to the interface output queue. */
ospf_packet_add (oi, op_dup);
@@ -3167,7 +3161,7 @@ ospf_db_desc_send (struct ospf_neighbor *nbr)
if (oi->type == OSPF_IFTYPE_POINTOPOINT)
op->dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
else
- op->dst = nbr->address.u.prefix4;
+ op->dst = nbr->src;
/* Add packet to the interface output queue. */
ospf_packet_add (oi, op);
@@ -3229,7 +3223,7 @@ ospf_ls_req_send (struct ospf_neighbor *nbr)
if (oi->type == OSPF_IFTYPE_POINTOPOINT)
op->dst.s_addr = htonl (OSPF_ALLSPFROUTERS);
else
- op->dst = nbr->address.u.prefix4;
+ op->dst = nbr->src;
/* Add packet to the interface output queue. */
ospf_packet_add (oi, op);
@@ -3436,7 +3430,7 @@ ospf_ls_upd_send (struct ospf_neighbor *nbr, struct list *update, int flag)
else if (oi->type == OSPF_IFTYPE_POINTOPOINT)
p.prefix.s_addr = htonl (OSPF_ALLSPFROUTERS);
else if (flag == OSPF_SEND_PACKET_DIRECT)
- p.prefix = nbr->address.u.prefix4;
+ p.prefix = nbr->src;
else if (oi->state == ISM_DR || oi->state == ISM_Backup)
p.prefix.s_addr = htonl (OSPF_ALLSPFROUTERS);
else if (oi->type == OSPF_IFTYPE_POINTOMULTIPOINT)
@@ -3516,7 +3510,7 @@ ospf_ls_ack_send (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
struct ospf_interface *oi = nbr->oi;
if (listcount (oi->ls_ack_direct.ls_ack) == 0)
- oi->ls_ack_direct.dst = nbr->address.u.prefix4;
+ oi->ls_ack_direct.dst = nbr->src;
listnode_add (oi->ls_ack_direct.ls_ack, ospf_lsa_lock (lsa));
@@ -3544,7 +3538,7 @@ ospf_ls_ack_send_delayed (struct ospf_interface *oi)
for (ALL_LIST_ELEMENTS_RO (oi->nbrs, node, nbr))
if (nbr != oi->nbr_self && nbr->state >= NSM_Exchange)
while (listcount (oi->ls_ack))
- ospf_ls_ack_send_list (oi, oi->ls_ack, nbr->address.u.prefix4);
+ ospf_ls_ack_send_list (oi, oi->ls_ack, nbr->src);
return;
}
if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 2c97488e..a3c39447 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -2911,7 +2911,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf,
vty_out (vty, " Designated Router (ID) %s,",
inet_ntoa (nbr->router_id));
vty_out (vty, " Interface Address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
+ inet_ntoa (nbr->src), VTY_NEWLINE);
}
}
@@ -2930,7 +2930,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf,
vty_out (vty, " Backup Designated Router (ID) %s,",
inet_ntoa (nbr->router_id));
vty_out (vty, " Interface Address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
+ inet_ntoa (nbr->src), VTY_NEWLINE);
}
}
@@ -3220,7 +3220,7 @@ show_ip_ospf_neighbor_detail_sub (struct vty *vty, struct ospf_interface *oi,
/* Show interface address. */
vty_out (vty, " interface address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
+ inet_ntoa (nbr->src), VTY_NEWLINE);
/* Show Area ID. */
vty_out (vty, " In the area %s via interface %s%s",
ospf_area_desc_string (oi->area), oi->ifp->name, VTY_NEWLINE);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 22db4498..1f32a484 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -1404,7 +1404,7 @@ ospf_nbr_nbma_add (struct ospf_nbr_nbma *nbr_nbma,
if (nbr_nbma->nbr != NULL)
return;
- if (IPV4_ADDR_SAME (&oi->nbr_self->address.u.prefix4, &nbr_nbma->addr))
+ if (IPV4_ADDR_SAME (&oi->nbr_self->src, &nbr_nbma->addr))
return;
nbr_nbma->oi = oi;
@@ -1424,7 +1424,6 @@ ospf_nbr_nbma_add (struct ospf_nbr_nbma *nbr_nbma,
nbr->src = nbr_nbma->addr;
nbr->nbr_nbma = nbr_nbma;
nbr->priority = nbr_nbma->priority;
- nbr->address.u.prefix4 = nbr_nbma->addr;
nbr_nbma->nbr = nbr;
OSPF_NSM_EVENT_EXECUTE (nbr, NSM_Start);
}