summaryrefslogtreecommitdiff
path: root/service/src/node_bfd.c
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/node_bfd.c')
-rw-r--r--service/src/node_bfd.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/service/src/node_bfd.c b/service/src/node_bfd.c
index baf13b2..5a8e812 100644
--- a/service/src/node_bfd.c
+++ b/service/src/node_bfd.c
@@ -100,6 +100,8 @@ uint16_t get_bfd_session_id(rte_graph_t graph_id, struct rte_ipv4_hdr * ipv4_hdr
return get_free_session_id(graph_id, ipv4_hdr);
}
+#define BFD_USE_YOUR_DISCRIMINATOR_AS_MY_DISCRIMINATOR 0
+
/* Reply Bfd Request */
uint8_t bfd_reply(struct rte_ether_hdr * ether_hdr, struct rte_ipv4_hdr * ipv4_hdr, struct rte_udp_hdr * udp_hdr,
uint16_t bfd_session_id)
@@ -123,10 +125,17 @@ uint8_t bfd_reply(struct rte_ether_hdr * ether_hdr, struct rte_ipv4_hdr * ipv4_h
/* Swap discriminator */
struct bfd_header_t * bfd_hdr = (struct bfd_header_t *)(udp_hdr + 1);
uint8_t swap_discriminator[4];
+
+#if BFD_USE_YOUR_DISCRIMINATOR_AS_MY_DISCRIMINATOR
+ memcpy(swap_discriminator, bfd_hdr->your_discriminator, sizeof(swap_discriminator));
+ memcpy(bfd_hdr->your_discriminator, bfd_hdr->my_discriminator, sizeof(swap_discriminator));
+ memcpy(bfd_hdr->my_discriminator, swap_discriminator, sizeof(swap_discriminator));
+#else
uint32_t discriminator = htonl(MR_BFD_START_DISCRIMINATOR + bfd_session_id);
memcpy(swap_discriminator, bfd_hdr->my_discriminator, sizeof(swap_discriminator));
memcpy(bfd_hdr->my_discriminator, &discriminator, sizeof(swap_discriminator));
memcpy(bfd_hdr->your_discriminator, swap_discriminator, sizeof(swap_discriminator));
+#endif
/* Set udp check sum */
udp_hdr->dgram_cksum = 0;