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;
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;
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;
{
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;
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)
{
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);
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);
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);
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);
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);
/* 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 *);
}
/* 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
break;
}
- lsa->data = ospf_lsa_data_new(length);
memcpy(lsa->data, lsah, length);
if (IS_DEBUG_OSPF_EVENT)
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 */
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)