File: evpn-binding.h

package info (click to toggle)
ovn 25.09.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 14,492 kB
  • sloc: ansic: 106,060; xml: 23,314; sh: 3,322; python: 1,838; makefile: 836
file content (88 lines) | stat: -rw-r--r-- 3,077 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* Copyright (c) 2025, Red Hat, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef EVPN_BINDING_H
#define EVPN_BINDING_H 1

#include <stdint.h>

#include "hmapx.h"
#include "openvswitch/hmap.h"
#include "uuidset.h"

struct ovsrec_bridge;
struct unixctl_conn;

struct evpn_binding_ctx_in {
    const struct ovsrec_bridge *br_int;
    /* Contains 'struct local_datapath'. */
    const struct hmap *local_datapaths;
    /* Contains 'struct evpn_remote_vtep'. */
    const struct hmap *remote_vteps;
};

struct evpn_binding_ctx_out {
    /* Contains 'struct evpn_binding'. */
    struct hmap *bindings;
    /* Contains pointers to 'struct evpn_binding'. */
    struct hmapx *updated_bindings;
    /* Contains 'flow_uuid' from removed 'struct evpn_binding'. */
    struct uuidset *removed_bindings;
    /* Contains 'struct evpn_multicast_group'. */
    struct hmap *multicast_groups;
    /* Contains pointers to 'struct evpn_multicast_group'. */
    struct hmapx *updated_multicast_groups;
    /* Contains 'flow_uuid' from removed 'struct evpn_multicast_group'. */
    struct uuidset *removed_multicast_groups;
    /* Contains 'struct tnlid_node". */
    struct hmap *tunnel_keys;
};

struct evpn_binding {
    struct hmap_node hmap_node;
    /* UUID used to identify physical flows related to this binding. */
    struct uuid flow_uuid;
    /* IP address of the remote VTEP. */
    struct in6_addr remote_ip;
    uint32_t vni;
    /* Local tunnel key to identify the binding. */
    uint32_t binding_key;

    ofp_port_t tunnel_ofport;
    uint32_t dp_key;
};

struct evpn_multicast_group {
    struct hmap_node hmap_node;
    /* UUID used to identify physical flows related to this mutlicast group. */
    struct uuid flow_uuid;
    /* Contains pointers to 'struct evpn_bindings'. */
    struct hmapx bindings;
    uint32_t vni;
};

void evpn_binding_run(const struct evpn_binding_ctx_in *,
                      struct evpn_binding_ctx_out *);
struct evpn_binding *evpn_binding_find(const struct hmap *evpn_bindings,
                                       const struct in6_addr *remote_ip,
                                       uint32_t vni);
void evpn_bindings_destroy(struct hmap *bindings);
void evpn_vtep_binding_list(struct unixctl_conn *conn, int argc,
                             const char *argv[], void *data_);
void evpn_multicast_groups_destroy(struct hmap *multicast_groups);
void evpn_multicast_group_list(struct unixctl_conn *conn, int argc,
                                const char *argv[], void *data_);

#endif /* EVPN_BINDING_H */