]> git.proxmox.com Git - mirror_frr.git/blobdiff - bfdd/config.c
Merge pull request #5721 from mjstapp/vty_copy_to_runn
[mirror_frr.git] / bfdd / config.c
index d1342eff1ec22fb58efa982b226c7731128da976..dd4a1926942bd66c41d618e825fbd448977d6d29 100644 (file)
@@ -30,6 +30,8 @@
 
 #include "bfd.h"
 
+DEFINE_MTYPE_STATIC(BFDD, BFDD_LABEL, "long-lived label memory")
+
 /*
  * Definitions
  */
@@ -68,7 +70,7 @@ static int config_add(struct bfd_peer_cfg *bpc,
 static int config_del(struct bfd_peer_cfg *bpc,
                      void *arg __attribute__((unused)))
 {
-       return ptm_bfd_ses_del(bpc) != 0;
+       return ptm_bfd_sess_del(bpc) != 0;
 }
 
 static int parse_config_json(struct json_object *jo, bpc_handle h, void *arg)
@@ -213,7 +215,8 @@ static int parse_peer_config(struct json_object *jo, struct bfd_peer_cfg *bpc)
                        if (strlcpy(bpc->bpc_localif, sval,
                                    sizeof(bpc->bpc_localif))
                            > sizeof(bpc->bpc_localif)) {
-                               log_debug("\tlocal-interface: %s (truncated)");
+                               log_debug("\tlocal-interface: %s (truncated)",
+                                         sval);
                                error++;
                        } else {
                                log_debug("\tlocal-interface: %s", sval);
@@ -233,7 +236,7 @@ static int parse_peer_config(struct json_object *jo, struct bfd_peer_cfg *bpc)
                        bpc->bpc_detectmultiplier =
                                json_object_get_int64(jo_val);
                        bpc->bpc_has_detectmultiplier = true;
-                       log_debug("\tdetect-multiplier: %llu",
+                       log_debug("\tdetect-multiplier: %u",
                                  bpc->bpc_detectmultiplier);
                } else if (strcmp(key, "receive-interval") == 0) {
                        bpc->bpc_recvinterval = json_object_get_int64(jo_val);
@@ -309,24 +312,7 @@ static int parse_peer_label_config(struct json_object *jo,
        log_debug("\tpeer-label: %s", sval);
 
        /* Translate the label into BFD address keys. */
-       bpc->bpc_ipv4 = !BFD_CHECK_FLAG(pl->pl_bs->flags, BFD_SESS_FLAG_IPV6);
-       bpc->bpc_mhop = BFD_CHECK_FLAG(pl->pl_bs->flags, BFD_SESS_FLAG_MH);
-       if (bpc->bpc_mhop) {
-               bpc->bpc_peer = pl->pl_bs->mhop.peer;
-               bpc->bpc_local = pl->pl_bs->mhop.local;
-               if (pl->pl_bs->mhop.vrfid != VRF_DEFAULT) {
-                       bpc->bpc_has_vrfname = true;
-                       strlcpy(bpc->bpc_vrfname, pl->pl_bs->vrf->name,
-                               sizeof(bpc->bpc_vrfname));
-               }
-       } else {
-               bpc->bpc_peer = pl->pl_bs->shop.peer;
-               if (pl->pl_bs->ifname[0]) {
-                       bpc->bpc_has_localif = true;
-                       strlcpy(bpc->bpc_localif, pl->pl_bs->ifname,
-                               sizeof(bpc->bpc_localif));
-               }
-       }
+       bs_to_bpc(pl->pl_bs, bpc);
 
        return 0;
 }
@@ -519,6 +505,8 @@ int config_notify_request(struct bfd_control_socket *bcs, const char *jsonstr,
 
 static int json_object_add_peer(struct json_object *jo, struct bfd_session *bs)
 {
+       char addr_buf[INET6_ADDRSTRLEN];
+
        /* Add peer 'key' information. */
        if (BFD_CHECK_FLAG(bs->flags, BFD_SESS_FLAG_IPV6))
                json_object_boolean_true_add(jo, "ipv6");
@@ -528,21 +516,26 @@ static int json_object_add_peer(struct json_object *jo, struct bfd_session *bs)
        if (BFD_CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)) {
                json_object_boolean_true_add(jo, "multihop");
                json_object_string_add(jo, "peer-address",
-                                      satostr(&bs->mhop.peer));
+                                      inet_ntop(bs->key.family, &bs->key.peer,
+                                                addr_buf, sizeof(addr_buf)));
                json_object_string_add(jo, "local-address",
-                                      satostr(&bs->mhop.local));
-               if (bs->vrfname[0])
-                       json_object_string_add(jo, "vrf-name", bs->vrfname);
+                                      inet_ntop(bs->key.family, &bs->key.local,
+                                                addr_buf, sizeof(addr_buf)));
+               if (bs->key.vrfname[0])
+                       json_object_string_add(jo, "vrf-name", bs->key.vrfname);
        } else {
                json_object_boolean_false_add(jo, "multihop");
                json_object_string_add(jo, "peer-address",
-                                      satostr(&bs->shop.peer));
-               if (bs->local_address.sa_sin.sin_family != AF_UNSPEC)
-                       json_object_string_add(jo, "local-address",
-                                              satostr(&bs->local_address));
-               if (bs->ifname[0])
+                                      inet_ntop(bs->key.family, &bs->key.peer,
+                                                addr_buf, sizeof(addr_buf)));
+               if (memcmp(&bs->key.local, &zero_addr, sizeof(bs->key.local)))
+                       json_object_string_add(
+                               jo, "local-address",
+                               inet_ntop(bs->key.family, &bs->key.local,
+                                         addr_buf, sizeof(addr_buf)));
+               if (bs->key.ifname[0])
                        json_object_string_add(jo, "local-interface",
-                                              bs->ifname);
+                                              bs->key.ifname);
        }
 
        if (bs->pl)
@@ -574,8 +567,6 @@ struct peer_label *pl_new(const char *label, struct bfd_session *bs)
        struct peer_label *pl;
 
        pl = XCALLOC(MTYPE_BFDD_LABEL, sizeof(*pl));
-       if (pl == NULL)
-               return NULL;
 
        if (strlcpy(pl->pl_label, label, sizeof(pl->pl_label))
            > sizeof(pl->pl_label))