int ospf_if_get_output_cost(struct ospf_interface *oi)
{
/* If all else fails, use default OSPF cost */
- u_int32_t cost;
- u_int32_t bw, refbw;
+ uint32_t cost;
+ uint32_t bw, refbw;
/* ifp speed and bw can be 0 in some platforms, use ospf default bw
if bw is configured under interface it would be used.
/* See if a cost can be calculated from the zebra processes
interface bandwidth field. */
else {
- cost = (u_int32_t)((double)refbw / (double)bw + (double)0.5);
+ cost = (uint32_t)((double)refbw / (double)bw + (double)0.5);
if (cost < 1)
cost = 1;
else if (cost > 65535)
void ospf_if_recalculate_output_cost(struct interface *ifp)
{
- u_int32_t newcost;
+ uint32_t newcost;
struct route_node *rn;
for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
ospf_opaque_type9_lsa_init(oi);
oi->ospf = ospf;
+
+ ospf_if_stream_set(oi);
+
QOBJ_REG(oi, ospf_interface);
if (IS_DEBUG_OSPF_EVENT)
{
ospf_if_down(oi);
+ if (oi->obuf)
+ ospf_fifo_free(oi->obuf);
+
assert(oi->state == ISM_Down);
ospf_opaque_type9_lsa_term(oi);
route_table_finish(oi->ls_upd_queue);
/* Free any lists that should be freed */
- list_delete_and_null(&oi->nbr_nbma);
+ list_delete(&oi->nbr_nbma);
- list_delete_and_null(&oi->ls_ack);
- list_delete_and_null(&oi->ls_ack_direct.ls_ack);
+ list_delete(&oi->ls_ack);
+ list_delete(&oi->ls_ack_direct.ls_ack);
if (IS_DEBUG_OSPF_EVENT)
zlog_debug("%s: ospf interface %s vrf %s id %u deleted",
struct ospf *ospf = oi->ospf;
if (oi->obuf) {
- ospf_fifo_free(oi->obuf);
- oi->obuf = NULL;
-
+ /* flush the interface packet queue */
+ ospf_fifo_flush(oi->obuf);
/*reset protocol stats */
ospf_if_reset_stats(oi);
oip = XCALLOC(MTYPE_OSPF_IF_PARAMS, sizeof(struct ospf_if_params));
- if (!oip)
- return NULL;
-
UNSET_IF_PARAM(oip, output_cost_cmd);
UNSET_IF_PARAM(oip, transmit_delay);
UNSET_IF_PARAM(oip, retransmit_interval);
void ospf_del_if_params(struct ospf_if_params *oip)
{
- list_delete_and_null(&oip->auth_crypt);
+ list_delete(&oip->auth_crypt);
bfd_info_free(&(oip->bfd_info));
XFREE(MTYPE_OSPF_IF_PARAMS, oip);
}
if (oi->type == OSPF_IFTYPE_LOOPBACK)
OSPF_ISM_EVENT_SCHEDULE(oi, ISM_LoopInd);
else {
- ospf_if_stream_set(oi);
OSPF_ISM_EVENT_SCHEDULE(oi, ISM_InterfaceUp);
}
XFREE(MTYPE_OSPF_VL_DATA, vl_data);
}
-u_int vlink_count = 0;
+unsigned int vlink_count = 0;
struct ospf_interface *ospf_vl_new(struct ospf *ospf,
struct ospf_vl_data *vl_data)
"ospf_vl_new(): creating pseudo zebra interface vrf id %u",
ospf->vrf_id);
- snprintf(ifname, sizeof(ifname), "VLINK%d", vlink_count);
+ snprintf(ifname, sizeof(ifname), "VLINK%u", vlink_count);
vi = if_create(ifname, ospf->vrf_id);
/*
* if_create sets ZEBRA_INTERFACE_LINKDETECTION
vlink_count--;
}
+/* for a defined area, count the number of configured vl
+ */
+int ospf_vl_count(struct ospf *ospf, struct ospf_area *area)
+{
+ int count = 0;
+ struct ospf_vl_data *vl_data;
+ struct listnode *node;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->vlinks, node, vl_data)) {
+ if (area
+ && !IPV4_ADDR_SAME(&vl_data->vl_area_id, &area->area_id))
+ continue;
+ count++;
+ }
+ return count;
+}
+
/* Look up vl_data for given peer, optionally qualified to be in the
* specified area. NULL area returns first found..
*/
* there should be due to the ospf_spf_has_link() check
* in SPF. Lets warn and try pick a link anyway.
*/
- zlog_warn("ospf_vl_set_params: No backlink for %s!",
+ zlog_info("ospf_vl_set_params: No backlink for %s!",
vl_data->vl_oi->ifp->name);
for (i = 0; i < ntohs(rl->links); i++) {
switch (rl->link[i].type) {
listnode_add(crypt, ck);
}
-struct crypt_key *ospf_crypt_key_lookup(struct list *auth_crypt, u_char key_id)
+struct crypt_key *ospf_crypt_key_lookup(struct list *auth_crypt, uint8_t key_id)
{
struct listnode *node;
struct crypt_key *ck;
return NULL;
}
-int ospf_crypt_key_delete(struct list *auth_crypt, u_char key_id)
+int ospf_crypt_key_delete(struct list *auth_crypt, uint8_t key_id)
{
struct listnode *node, *nnode;
struct crypt_key *ck;
return 0;
}
-u_char ospf_default_iftype(struct interface *ifp)
+uint8_t ospf_default_iftype(struct interface *ifp)
{
if (if_is_pointopoint(ifp))
return OSPF_IFTYPE_POINTOPOINT;