pim6d: send PIM packets

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
David Lamparter 2022-03-12 22:43:05 +01:00
parent 7993f685c1
commit cc362d24aa
3 changed files with 56 additions and 56 deletions

View File

@ -53,37 +53,6 @@ void zclient_lookup_free(void)
{
}
/*
* packet handling
*/
int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
int pim_msg_size, const char *ifname)
{
return 0;
}
int pim_hello_send(struct interface *ifp, uint16_t holdtime)
{
return -1;
}
void pim_hello_restart_now(struct interface *ifp)
{
}
void pim_hello_restart_triggered(struct interface *ifp)
{
}
int pim_sock_add(struct interface *ifp)
{
return -1;
}
void pim_sock_delete(struct interface *ifp, const char *delete_message)
{
}
/*
* PIM register
*/
@ -121,12 +90,31 @@ struct bsgrp_node *pim_bsm_get_bsgrp_node(struct bsm_scope *scope,
void pim_bsm_write_config(struct vty *vty, struct interface *ifp)
{
}
int pim_bsm_process(struct interface *ifp, pim_sgaddr *sg, uint8_t *buf,
uint32_t buf_size, bool no_fwd)
{
return 0;
}
void pim_register_send(const uint8_t *buf, int buf_size, pim_addr src,
struct pim_rpf *rpg, int null_register,
struct pim_upstream *up)
{
}
void pim_register_stop_send(struct interface *ifp, pim_sgaddr *sg, pim_addr src,
pim_addr originator)
{
}
int pim_register_recv(struct interface *ifp, pim_addr dest_addr,
pim_addr src_addr, uint8_t *tlv_buf, int tlv_buf_size)
{
return 0;
}
int pim_register_stop_recv(struct interface *ifp, uint8_t *buf, int buf_size)
{
return 0;
}

View File

@ -522,8 +522,9 @@ void pim_sock_reset(struct interface *ifp)
pim_ifstat_reset(ifp);
}
#if PIM_IPV == 4
static uint16_t ip_id = 0;
#endif
static int pim_msg_send_frame(int fd, char *buf, size_t len,
struct sockaddr *dst, size_t salen,
@ -578,19 +579,13 @@ static int pim_msg_send_frame(int fd, char *buf, size_t len,
int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
int pim_msg_size, const char *ifname)
{
struct sockaddr_in to;
socklen_t tolen;
unsigned char buffer[10000];
unsigned char *msg_start;
uint8_t ttl;
struct pim_msg_header *header;
struct ip *ip;
memset(buffer, 0, 10000);
int sendlen = sizeof(struct ip) + pim_msg_size;
msg_start = buffer + sizeof(struct ip);
memcpy(msg_start, pim_msg, pim_msg_size);
header = (struct pim_msg_header *)pim_msg;
/*
@ -620,7 +615,11 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
break;
}
ip = (struct ip *)buffer;
#if PIM_IPV == 4
struct ip *ip = (struct ip *)buffer;
struct sockaddr_in to = {};
int sendlen = sizeof(*ip) + pim_msg_size;
ip->ip_id = htons(++ip_id);
ip->ip_hl = 5;
ip->ip_v = 4;
@ -631,17 +630,34 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
ip->ip_ttl = ttl;
ip->ip_len = htons(sendlen);
if (PIM_DEBUG_PIM_PACKETS) {
char dst_str[INET_ADDRSTRLEN];
pim_inet4_dump("<dst?>", dst, dst_str, sizeof(dst_str));
zlog_debug("%s: to %s on %s: msg_size=%d checksum=%x", __func__,
dst_str, ifname, pim_msg_size, header->checksum);
}
memset(&to, 0, sizeof(to));
to.sin_family = AF_INET;
to.sin_addr = dst;
tolen = sizeof(to);
#else
struct ip6_hdr *ip = (struct ip6_hdr *)buffer;
struct sockaddr_in6 to = {};
int sendlen = sizeof(*ip) + pim_msg_size;
ip->ip6_flow = 0;
ip->ip6_vfc = (6 << 4) | (IPTOS_PREC_INTERNETCONTROL >> 4);
ip->ip6_plen = htons(pim_msg_size);
ip->ip6_nxt = PIM_IP_PROTO_PIM;
ip->ip6_hlim = ttl;
ip->ip6_src = src;
ip->ip6_dst = dst;
to.sin6_family = AF_INET6;
to.sin6_addr = dst;
tolen = sizeof(to);
#endif
msg_start = buffer + sizeof(*ip);
memcpy(msg_start, pim_msg, pim_msg_size);
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug("%s: to %pPA on %s: msg_size=%d checksum=%x",
__func__, &dst, ifname, pim_msg_size,
header->checksum);
if (PIM_DEBUG_PIM_PACKETDUMP_SEND) {
pim_pkt_dump(__func__, pim_msg, pim_msg_size);
@ -661,20 +677,16 @@ static int hello_send(struct interface *ifp, uint16_t holdtime)
pim_ifp = ifp->info;
if (PIM_DEBUG_PIM_HELLO) {
char dst_str[INET_ADDRSTRLEN];
pim_inet4_dump("<dst?>", qpim_all_pim_routers_addr, dst_str,
sizeof(dst_str));
if (PIM_DEBUG_PIM_HELLO)
zlog_debug(
"%s: to %s on %s: holdt=%u prop_d=%u overr_i=%u dis_join_supp=%d dr_prio=%u gen_id=%08x addrs=%d",
__func__, dst_str, ifp->name, holdtime,
pim_ifp->pim_propagation_delay_msec,
"%s: to %pPA on %s: holdt=%u prop_d=%u overr_i=%u dis_join_supp=%d dr_prio=%u gen_id=%08x addrs=%d",
__func__, &qpim_all_pim_routers_addr, ifp->name,
holdtime, pim_ifp->pim_propagation_delay_msec,
pim_ifp->pim_override_interval_msec,
PIM_IF_TEST_PIM_CAN_DISABLE_JOIN_SUPPRESSION(
pim_ifp->options),
pim_ifp->pim_dr_priority, pim_ifp->pim_generation_id,
listcount(ifp->connected));
}
pim_tlv_size = pim_hello_build_tlv(
ifp, pim_msg + PIM_PIM_MIN_LEN,

View File

@ -39,6 +39,7 @@ pim_common = \
pimd/pim_neighbor.c \
pimd/pim_nht.c \
pimd/pim_oil.c \
pimd/pim_pim.c \
pimd/pim_routemap.c \
pimd/pim_rp.c \
pimd/pim_rpf.c \
@ -72,7 +73,6 @@ pimd_pimd_SOURCES = \
pimd/pim_msdp.c \
pimd/pim_msdp_packet.c \
pimd/pim_msdp_socket.c \
pimd/pim_pim.c \
pimd/pim_register.c \
pimd/pim_signals.c \
pimd/pim_zlookup.c \