1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2018 Cumulus Networks, Inc.
9 #include <lib/version.h>
27 #include "distribute.h"
31 #include "nexthop_group.h"
35 #include "pbr_zebra.h"
37 #include "pbr_debug.h"
40 zebra_capabilities_t _caps_p
[] = {
41 ZCAP_NET_RAW
, ZCAP_BIND
, ZCAP_NET_ADMIN
,
44 struct zebra_privs_t pbr_privs
= {
45 #if defined(FRR_USER) && defined(FRR_GROUP)
49 #if defined(VTY_GROUP)
50 .vty_group
= VTY_GROUP
,
53 .cap_num_p
= array_size(_caps_p
),
56 struct option longopts
[] = { { 0 } };
58 /* Master of threads. */
59 struct thread_master
*master
;
62 static void sighup(void)
64 zlog_info("SIGHUP received");
67 /* SIGINT / SIGTERM handler. */
68 static void sigint(void)
70 zlog_notice("Terminating on signal");
79 /* SIGUSR1 handler. */
80 static void sigusr1(void)
85 struct frr_signal_t pbr_signals
[] = {
104 #define PBR_VTY_PORT 2615
106 static const struct frr_yang_module_info
*const pbrd_yang_modules
[] = {
112 FRR_DAEMON_INFO(pbrd
, PBR
, .vty_port
= PBR_VTY_PORT
,
114 .proghelp
= "Implementation of PBR.",
116 .signals
= pbr_signals
,
117 .n_signals
= array_size(pbr_signals
),
121 .yang_modules
= pbrd_yang_modules
,
122 .n_yang_modules
= array_size(pbrd_yang_modules
),
125 int main(int argc
, char **argv
, char **envp
)
127 frr_preinit(&pbrd_di
, argc
, argv
);
128 frr_opt_add("", longopts
, "");
133 opt
= frr_getopt(argc
, argv
, NULL
);
150 nexthop_group_init(pbr_nhgroup_add_cb
, pbr_nhgroup_modify_cb
,
151 pbr_nhgroup_add_nexthop_cb
,
152 pbr_nhgroup_del_nexthop_cb
, pbr_nhgroup_delete_cb
);
155 * So we safely ignore these commands since
156 * we are getting them at this point in time
161 if_zapi_callbacks(pbr_ifp_create
, pbr_ifp_up
,
162 pbr_ifp_down
, pbr_ifp_destroy
);