]>
git.proxmox.com Git - mirror_frr.git/blob - bgpd/rfapi/rfapi_nve_addr.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright 2009-2016, LabN Consulting, L.L.C.
10 #include "lib/prefix.h"
11 #include "lib/agg_table.h"
13 #include "lib/memory.h"
14 #include "lib/skiplist.h"
17 #include "bgpd/bgpd.h"
19 #include "bgpd/rfapi/bgp_rfapi_cfg.h"
20 #include "bgpd/rfapi/rfapi.h"
21 #include "bgpd/rfapi/rfapi_backend.h"
23 #include "bgpd/rfapi/rfapi_import.h"
24 #include "bgpd/rfapi/rfapi_private.h"
25 #include "bgpd/rfapi/rfapi_nve_addr.h"
26 #include "bgpd/rfapi/rfapi_vty.h"
27 #include "bgpd/rfapi/vnc_debug.h"
29 #define DEBUG_NVE_ADDR 0
31 void rfapiNveAddr2Str(struct rfapi_nve_addr
*, char *, int);
35 static void logdifferent(const char *tag
, struct rfapi_nve_addr
*a
,
36 struct rfapi_nve_addr
*b
)
41 rfapiNveAddr2Str(a
, a_str
, BUFSIZ
);
42 rfapiNveAddr2Str(b
, b_str
, BUFSIZ
);
43 vnc_zlog_debug_verbose("%s: [%s] [%s]", tag
, a_str
, b_str
);
48 int rfapi_nve_addr_cmp(const void *k1
, const void *k2
)
50 const struct rfapi_nve_addr
*a
= (struct rfapi_nve_addr
*)k1
;
51 const struct rfapi_nve_addr
*b
= (struct rfapi_nve_addr
*)k2
;
56 vnc_zlog_debug_verbose("%s: missing address a=%p b=%p",
61 if (a
->un
.addr_family
!= b
->un
.addr_family
) {
63 vnc_zlog_debug_verbose(
64 "diff: UN addr fam a->un.af=%d, b->un.af=%d",
65 a
->un
.addr_family
, b
->un
.addr_family
);
67 return (a
->un
.addr_family
- b
->un
.addr_family
);
69 if (a
->un
.addr_family
== AF_INET
) {
70 ret
= IPV4_ADDR_CMP(&a
->un
.addr
.v4
, &b
->un
.addr
.v4
);
73 logdifferent("diff: UN addr", a
, b
);
77 } else if (a
->un
.addr_family
== AF_INET6
) {
78 ret
= IPV6_ADDR_CMP(&a
->un
.addr
.v6
, &b
->un
.addr
.v6
);
81 logdifferent("diff: UN addr", a
, b
);
88 if (a
->vn
.addr_family
!= b
->vn
.addr_family
) {
90 vnc_zlog_debug_verbose(
91 "diff: pT addr fam a->vn.af=%d, b->vn.af=%d",
92 a
->vn
.addr_family
, b
->vn
.addr_family
);
94 return (a
->vn
.addr_family
- b
->vn
.addr_family
);
96 if (a
->vn
.addr_family
== AF_INET
) {
97 ret
= IPV4_ADDR_CMP(&a
->vn
.addr
.v4
, &b
->vn
.addr
.v4
);
100 logdifferent("diff: VN addr", a
, b
);
104 } else if (a
->vn
.addr_family
== AF_INET6
) {
105 ret
= IPV6_ADDR_CMP(&a
->vn
.addr
.v6
, &b
->vn
.addr
.v6
);
108 logdifferent("diff: VN addr", a
, b
);
118 void rfapiNveAddr2Str(struct rfapi_nve_addr
*na
, char *buf
, int bufsize
)
123 #define REMAIN (bufsize - (p-buf))
124 #define INCP {p += (r > REMAIN)? REMAIN: r;}
129 r
= snprintf(p
, REMAIN
, "VN=");
132 if (!rfapiRfapiIpAddr2Str(&na
->vn
, p
, REMAIN
))
135 buf
[bufsize
- 1] = 0;
136 p
= buf
+ strlen(buf
);
138 r
= snprintf(p
, REMAIN
, ", UN=");
141 rfapiRfapiIpAddr2Str(&na
->un
, p
, REMAIN
);
144 buf
[bufsize
- 1] = 0;