]>
git.proxmox.com Git - mirror_frr.git/blob - zebra/zebra_mroute.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2016 Cumulus Networks, Inc.
6 * This file is part of Quagga
16 #include "zebra/zserv.h"
17 #include "zebra/zebra_vrf.h"
18 #include "zebra/zebra_mroute.h"
20 #include "zebra/debug.h"
22 void zebra_ipmr_route_stats(ZAPI_HANDLER_ARGS
)
24 struct mcast_route_data mroute
;
28 memset(&mroute
, 0, sizeof(mroute
));
29 STREAM_GETL(msg
, mroute
.family
);
31 switch (mroute
.family
) {
33 SET_IPADDR_V4(&mroute
.src
);
34 SET_IPADDR_V4(&mroute
.grp
);
35 STREAM_GET(&mroute
.src
.ipaddr_v4
, msg
,
36 sizeof(mroute
.src
.ipaddr_v4
));
37 STREAM_GET(&mroute
.grp
.ipaddr_v4
, msg
,
38 sizeof(mroute
.grp
.ipaddr_v4
));
41 SET_IPADDR_V6(&mroute
.src
);
42 SET_IPADDR_V6(&mroute
.grp
);
43 STREAM_GET(&mroute
.src
.ipaddr_v6
, msg
,
44 sizeof(mroute
.src
.ipaddr_v6
));
45 STREAM_GET(&mroute
.grp
.ipaddr_v6
, msg
,
46 sizeof(mroute
.grp
.ipaddr_v6
));
49 zlog_warn("%s: Invalid address family received while parsing",
54 STREAM_GETL(msg
, mroute
.ifindex
);
56 if (IS_ZEBRA_DEBUG_KERNEL
)
57 zlog_debug("Asking for (%pIA,%pIA)[%s(%u)] mroute information",
58 &mroute
.src
, &mroute
.grp
, zvrf
->vrf
->name
,
61 suc
= kernel_get_ipmr_sg_stats(zvrf
, &mroute
);
64 s
= stream_new(ZEBRA_MAX_PACKET_SIZ
);
68 zclient_create_header(s
, ZEBRA_IPMR_ROUTE_STATS
, zvrf_id(zvrf
));
70 if (mroute
.family
== AF_INET
) {
71 stream_write(s
, &mroute
.src
.ipaddr_v4
,
72 sizeof(mroute
.src
.ipaddr_v4
));
73 stream_write(s
, &mroute
.grp
.ipaddr_v4
,
74 sizeof(mroute
.grp
.ipaddr_v4
));
76 stream_write(s
, &mroute
.src
.ipaddr_v6
,
77 sizeof(mroute
.src
.ipaddr_v6
));
78 stream_write(s
, &mroute
.grp
.ipaddr_v6
,
79 sizeof(mroute
.grp
.ipaddr_v6
));
82 stream_put(s
, &mroute
.lastused
, sizeof(mroute
.lastused
));
83 stream_putl(s
, (uint32_t)suc
);
85 stream_putw_at(s
, 0, stream_get_endp(s
));
86 zserv_send_message(client
, s
);