]>
git.proxmox.com Git - mirror_frr.git/blob - bgpd/rfapi/rfapi_descriptor_rfp_utils.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright 2009-2016, LabN Consulting, L.L.C.
9 #include "lib/prefix.h"
10 #include "lib/table.h"
12 #include "lib/memory.h"
15 #include "bgpd/bgpd.h"
17 #include "bgpd/rfapi/rfapi.h"
18 #include "bgpd/rfapi/rfapi_private.h"
19 #include "bgpd/rfapi/rfapi_descriptor_rfp_utils.h"
20 #include "bgpd/rfapi/vnc_debug.h"
23 void *rfapi_create_generic(struct rfapi_ip_addr
*vn
, struct rfapi_ip_addr
*un
)
25 struct rfapi_descriptor
*rfd
;
26 rfd
= XCALLOC(MTYPE_RFAPI_DESC
, sizeof(struct rfapi_descriptor
));
27 vnc_zlog_debug_verbose("%s: rfd=%p", __func__
, rfd
);
33 /*------------------------------------------
36 * Compare two generic rfapi descriptors.
39 * grfd: rfapi descriptor returned by rfapi_open or rfapi_create_generic
45 *------------------------------------------*/
46 void rfapi_free_generic(void *grfd
)
48 struct rfapi_descriptor
*rfd
;
49 rfd
= (struct rfapi_descriptor
*)grfd
;
50 XFREE(MTYPE_RFAPI_DESC
, rfd
);
54 /*------------------------------------------
57 * Compare two generic rfapi descriptors.
60 * rfd1: rfapi descriptor returned by rfapi_open or rfapi_create_generic
61 * rfd2: rfapi descriptor returned by rfapi_open or rfapi_create_generic
68 *------------------------------------------*/
69 int rfapi_compare_rfds(void *rfd1
, void *rfd2
)
71 struct rfapi_descriptor
*rrfd1
, *rrfd2
;
74 rrfd1
= (struct rfapi_descriptor
*)rfd1
;
75 rrfd2
= (struct rfapi_descriptor
*)rfd2
;
77 if (rrfd1
->vn_addr
.addr_family
== rrfd2
->vn_addr
.addr_family
) {
78 if (rrfd1
->vn_addr
.addr_family
== AF_INET
)
79 match
= IPV4_ADDR_SAME(&(rrfd1
->vn_addr
.addr
.v4
),
80 &(rrfd2
->vn_addr
.addr
.v4
));
82 match
= IPV6_ADDR_SAME(&(rrfd1
->vn_addr
.addr
.v6
),
83 &(rrfd2
->vn_addr
.addr
.v6
));
87 * If the VN addresses don't match in all forms,
94 * do the process again for the UN addresses.
97 if (rrfd1
->un_addr
.addr_family
== rrfd2
->un_addr
.addr_family
) {
99 * UN address families match
100 * now check the actual UN addresses
102 if (rrfd1
->un_addr
.addr_family
== AF_INET
)
103 match
= IPV4_ADDR_SAME(&(rrfd1
->un_addr
.addr
.v4
),
104 &(rrfd2
->un_addr
.addr
.v4
));
106 match
= IPV6_ADDR_SAME(&(rrfd1
->un_addr
.addr
.v6
),
107 &(rrfd2
->un_addr
.addr
.v6
));