diff options
Diffstat (limited to 'service/src/node_bfd.c')
| -rw-r--r-- | service/src/node_bfd.c | 9 |
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; |
