summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim6_stubs.c50
-rw-r--r--pimd/pim_pim.c60
-rw-r--r--pimd/subdir.am2
3 files changed, 56 insertions, 56 deletions
diff --git a/pimd/pim6_stubs.c b/pimd/pim6_stubs.c
index f2781a3ce9..818b137abf 100644
--- a/pimd/pim6_stubs.c
+++ b/pimd/pim6_stubs.c
@@ -54,37 +54,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
*/
void pim_register_join(struct pim_upstream *up)
@@ -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;
+}
diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c
index 82f735465a..1c8e31212e 100644
--- a/pimd/pim_pim.c
+++ b/pimd/pim_pim.c
@@ -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,
diff --git a/pimd/subdir.am b/pimd/subdir.am
index 9e61b03c94..ba7bdb3493 100644
--- a/pimd/subdir.am
+++ b/pimd/subdir.am
@@ -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 \