]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: Add ospf_lsa_new_and_data function and abstract away 2876/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 21 Aug 2018 00:41:37 +0000 (20:41 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 21 Aug 2018 00:41:37 +0000 (20:41 -0400)
In all but one instance we were following this pattern
with ospf_lsa_new:

ospf_lsa_new()
ospf_lsa_data_new()

so let's create a ospf_lsa_new_and_data to abstract
this bit of fun and cleanup all the places where
it assumes these function calls can fail.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
ospfd/ospf_apiserver.c
ospfd/ospf_ext.c
ospfd/ospf_flood.c
ospfd/ospf_lsa.c
ospfd/ospf_lsa.h
ospfd/ospf_packet.c
ospfd/ospf_ri.c
ospfd/ospf_te.c

index c0ce971f0cbd6fd5d7520a2096e934fbb6f9ffb1..57e0ae5ec95f83c95b3323c119483d103dd782b7 100644 (file)
@@ -1425,19 +1425,7 @@ struct ospf_lsa *ospf_apiserver_opaque_lsa_new(struct ospf_area *area,
        newlsa->length = htons(length);
 
        /* Create OSPF LSA. */
-       if ((new = ospf_lsa_new()) == NULL) {
-               zlog_warn("ospf_apiserver_opaque_lsa_new: ospf_lsa_new() ?");
-               stream_free(s);
-               return NULL;
-       }
-
-       if ((new->data = ospf_lsa_data_new(length)) == NULL) {
-               zlog_warn(
-                       "ospf_apiserver_opaque_lsa_new: ospf_lsa_data_new() ?");
-               ospf_lsa_unlock(&new);
-               stream_free(s);
-               return NULL;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        new->area = area;
        new->oi = oi;
index b8d14c351ee38b1a82aa494fac7dead90144ccbc..f6ed9b81b964d04915f6f9b9f01e64e7998be741 100644 (file)
@@ -977,20 +977,7 @@ static struct ospf_lsa *ospf_ext_pref_lsa_new(struct ospf_area *area,
        lsah->length = htons(length);
 
        /* Now, create an OSPF LSA instance. */
-       new = ospf_lsa_new();
-       if (new == NULL) {
-               zlog_warn("EXT (%s): ospf_lsa_new() error", __func__);
-               stream_free(s);
-               return NULL;
-       }
-       new->data = ospf_lsa_data_new(length);
-       if (new->data == NULL) {
-               zlog_warn("EXT (%s): ospf_lsa_data_new() error", __func__);
-               ospf_lsa_unlock(&new);
-               new = NULL;
-               stream_free(s);
-               return NULL;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        /* Segment Routing belongs only to default VRF */
        new->vrf_id = VRF_DEFAULT;
@@ -1056,20 +1043,7 @@ static struct ospf_lsa *ospf_ext_link_lsa_new(struct ospf_area *area,
        lsah->length = htons(length);
 
        /* Now, create an OSPF LSA instance. */
-       new = ospf_lsa_new();
-       if (new == NULL) {
-               zlog_warn("EXT (%s): ospf_lsa_new() error", __func__);
-               stream_free(s);
-               return NULL;
-       }
-       new->data = ospf_lsa_data_new(length);
-       if (new->data == NULL) {
-               zlog_warn("EXT (%s): ospf_lsa_data_new() error", __func__);
-               ospf_lsa_unlock(&new);
-               new = NULL;
-               stream_free(s);
-               return NULL;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        /* Segment Routing belongs only to default VRF */
        new->vrf_id = VRF_DEFAULT;
index 002c6bba8d7023a52743955ed84b09466c538be5..b4e9dda58a106f51347399df61be7d0cad0caf03 100644 (file)
@@ -810,8 +810,7 @@ struct ospf_lsa *ospf_ls_request_new(struct lsa_header *lsah)
 {
        struct ospf_lsa *new;
 
-       new = ospf_lsa_new();
-       new->data = ospf_lsa_data_new(OSPF_LSA_HEADER_SIZE);
+       new = ospf_lsa_new_and_data(OSPF_LSA_HEADER_SIZE);
        memcpy(new->data, lsah, OSPF_LSA_HEADER_SIZE);
 
        return new;
index 2651cf717b82355c9d83190db21752394ec795be..47d8b2f57a73a6bda2bcd94dee26b23287d54fbd 100644 (file)
@@ -167,6 +167,16 @@ struct ospf_lsa *ospf_lsa_new()
        return new;
 }
 
+struct ospf_lsa *ospf_lsa_new_and_data(size_t size)
+{
+       struct ospf_lsa *new;
+
+       new = ospf_lsa_new();
+       new->data = ospf_lsa_data_new(size);
+
+       return new;
+}
+
 /* Duplicate OSPF LSA. */
 struct ospf_lsa *ospf_lsa_dup(struct ospf_lsa *lsa)
 {
@@ -781,17 +791,13 @@ static struct ospf_lsa *ospf_router_lsa_new(struct ospf_area *area)
        lsah->length = htons(length);
 
        /* Now, create OSPF LSA instance. */
-       if ((new = ospf_lsa_new()) == NULL) {
-               zlog_err("%s: Unable to create new lsa", __func__);
-               return NULL;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        new->area = area;
        SET_FLAG(new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
        new->vrf_id = area->ospf->vrf_id;
 
        /* Copy LSA data to store, discard stream. */
-       new->data = ospf_lsa_data_new(length);
        memcpy(new->data, lsah, length);
        stream_free(s);
 
@@ -997,17 +1003,13 @@ static struct ospf_lsa *ospf_network_lsa_new(struct ospf_interface *oi)
        lsah->length = htons(length);
 
        /* Create OSPF LSA instance. */
-       if ((new = ospf_lsa_new()) == NULL) {
-               zlog_err("%s: ospf_lsa_new returned NULL", __func__);
-               return NULL;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        new->area = oi->area;
        SET_FLAG(new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
        new->vrf_id = oi->ospf->vrf_id;
 
        /* Copy LSA to store. */
-       new->data = ospf_lsa_data_new(length);
        memcpy(new->data, lsah, length);
        stream_free(s);
 
@@ -1181,13 +1183,12 @@ static struct ospf_lsa *ospf_summary_lsa_new(struct ospf_area *area,
        lsah->length = htons(length);
 
        /* Create OSPF LSA instance. */
-       new = ospf_lsa_new();
+       new = ospf_lsa_new_and_data(length);
        new->area = area;
        SET_FLAG(new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
        new->vrf_id = area->ospf->vrf_id;
 
        /* Copy LSA to store. */
-       new->data = ospf_lsa_data_new(length);
        memcpy(new->data, lsah, length);
        stream_free(s);
 
@@ -1323,13 +1324,12 @@ static struct ospf_lsa *ospf_summary_asbr_lsa_new(struct ospf_area *area,
        lsah->length = htons(length);
 
        /* Create OSPF LSA instance. */
-       new = ospf_lsa_new();
+       new = ospf_lsa_new_and_data(length);
        new->area = area;
        SET_FLAG(new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
        new->vrf_id = area->ospf->vrf_id;
 
        /* Copy LSA to store. */
-       new->data = ospf_lsa_data_new(length);
        memcpy(new->data, lsah, length);
        stream_free(s);
 
@@ -1629,14 +1629,13 @@ static struct ospf_lsa *ospf_external_lsa_new(struct ospf *ospf,
        lsah->length = htons(length);
 
        /* Now, create OSPF LSA instance. */
-       new = ospf_lsa_new();
+       new = ospf_lsa_new_and_data(length);
        new->area = NULL;
        SET_FLAG(new->flags,
                 OSPF_LSA_SELF | OSPF_LSA_APPROVED | OSPF_LSA_SELF_CHECKED);
        new->vrf_id = ospf->vrf_id;
 
        /* Copy LSA data to store, discard stream. */
-       new->data = ospf_lsa_data_new(length);
        memcpy(new->data, lsah, length);
        stream_free(s);
 
index f8f7b28d4ed1a17c7d8bd4c903aae5c7e86cea14..ba4c4c1cacf7e2489e42ffc5046017f039039151 100644 (file)
@@ -235,6 +235,7 @@ extern int ospf_check_nbr_status(struct ospf *);
 
 /* Prototype for LSA primitive. */
 extern struct ospf_lsa *ospf_lsa_new(void);
+extern struct ospf_lsa *ospf_lsa_new_and_data(size_t size);
 extern struct ospf_lsa *ospf_lsa_dup(struct ospf_lsa *);
 extern void ospf_lsa_free(struct ospf_lsa *);
 extern struct ospf_lsa *ospf_lsa_lock(struct ospf_lsa *);
index f1d4a39dba82d06e1262e26ebbd522bd907918dd..56b83d22d5b7ca9f84d41f1de34959999b4737cb 100644 (file)
@@ -1742,7 +1742,7 @@ static struct list *ospf_ls_upd_list_lsa(struct ospf_neighbor *nbr,
                }
 
                /* Create OSPF LSA instance. */
-               lsa = ospf_lsa_new();
+               lsa = ospf_lsa_new_and_data(length);
 
                lsa->vrf_id = oi->ospf->vrf_id;
                /* We may wish to put some error checking if type NSSA comes in
@@ -1761,7 +1761,6 @@ static struct list *ospf_ls_upd_list_lsa(struct ospf_neighbor *nbr,
                        break;
                }
 
-               lsa->data = ospf_lsa_data_new(length);
                memcpy(lsa->data, lsah, length);
 
                if (IS_DEBUG_OSPF_EVENT)
index fa7dd04d19f800f6a48a408a7eb8fbb7330dff1a..c9d0a53c8dc1cf42c7504866d4fb8b2ab808508c 100644 (file)
@@ -775,18 +775,7 @@ static struct ospf_lsa *ospf_router_info_lsa_new()
        lsah->length = htons(length);
 
        /* Now, create an OSPF LSA instance. */
-       if ((new = ospf_lsa_new()) == NULL) {
-               zlog_warn("ospf_router_info_lsa_new: ospf_lsa_new() ?");
-               stream_free(s);
-               return NULL;
-       }
-       if ((new->data = ospf_lsa_data_new(length)) == NULL) {
-               zlog_warn("ospf_router_info_lsa_new: ospf_lsa_data_new() ?");
-               ospf_lsa_unlock(&new);
-               new = NULL;
-               stream_free(s);
-               return new;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        new->area = OspfRI.area; /* Area must be null if the Opaque type is AS
                                    scope, fulfill otherwise */
index cc2d9282fe14c024427fef124a237345364ba7b4..a9dc1c18e392e110701acbbdc991215a6bf25fd7 100644 (file)
@@ -1201,18 +1201,7 @@ static struct ospf_lsa *ospf_mpls_te_lsa_new(struct ospf *ospf,
        lsah->length = htons(length);
 
        /* Now, create an OSPF LSA instance. */
-       if ((new = ospf_lsa_new()) == NULL) {
-               zlog_warn("%s: ospf_lsa_new() ?", __func__);
-               stream_free(s);
-               return NULL;
-       }
-       if ((new->data = ospf_lsa_data_new(length)) == NULL) {
-               zlog_warn("%s: ospf_lsa_data_new() ?", __func__);
-               ospf_lsa_unlock(&new);
-               new = NULL;
-               stream_free(s);
-               return new;
-       }
+       new = ospf_lsa_new_and_data(length);
 
        new->vrf_id = ospf->vrf_id;
        if (area && area->ospf)