@@ -22,7 +22,6 @@ struct event *ev_sigterm;
22
22
static std::string vlan_member = " VLAN_MEMBER|" ;
23
23
24
24
static std::string counter_table = " DHCPv6_COUNTER_TABLE|" ;
25
- struct database redis_db;
26
25
27
26
/* DHCPv6 filter */
28
27
/* sudo tcpdump -dd "inbound and ip6 dst ff02::1:2 && udp dst port 547" */
@@ -221,24 +220,9 @@ const struct dhcpv6_option *parse_dhcpv6_opt(const uint8_t *buffer, const uint8_
221
220
return option;
222
221
}
223
222
224
- /* *
225
- * @code void send_udp(int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type);
226
- *
227
- * @brief send udp packet
228
- *
229
- * @param *buffer message buffer
230
- * @param sockaddr_in6 target target socket
231
- * @param n length of message
232
- * @param relay_config *config pointer to relay_config
233
- * @param uint8_t msg_type message type of dhcpv6 option of relayed message
234
- *
235
- * @return dhcpv6_option end of dhcpv6 message option
236
- */
237
- void send_udp (int sock, uint8_t *buffer, struct sockaddr_in6 target, uint32_t n, relay_config *config, uint8_t msg_type) {
223
+ void process_sent_msg (relay_config *config, uint8_t msg_type) {
238
224
std::string counterVlan = counter_table;
239
- if (sendto (sock, buffer, n, 0 , (const struct sockaddr *)&target, sizeof (target)) == -1 )
240
- syslog (LOG_ERR, " sendto: Failed to send to target address\n " );
241
- else if (counterMap.find (msg_type) != counterMap.end ()) {
225
+ if (counterMap.find (msg_type) != counterMap.end ()) {
242
226
counters[msg_type]++;
243
227
update_counter (config->state_db , counterVlan.append (config->interface ), msg_type);
244
228
} else {
@@ -497,7 +481,9 @@ void relay_client(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *ip_h
497
481
current_buffer_position += dhcp_message_length + sizeof (dhcpv6_option);
498
482
499
483
for (auto server: config->servers_sock ) {
500
- send_udp (sock, buffer, server, current_buffer_position - buffer, config, new_message.msg_type );
484
+ if (send_udp (sock, buffer, server, current_buffer_position - buffer)) {
485
+ process_sent_msg (config, new_message.msg_type );
486
+ }
501
487
}
502
488
}
503
489
@@ -537,7 +523,9 @@ void relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *
537
523
current_buffer_position += dhcp_message_length + sizeof (dhcpv6_option);
538
524
539
525
for (auto server: config->servers_sock ) {
540
- send_udp (sock, buffer, server, current_buffer_position - buffer, config, new_message.msg_type );
526
+ if (send_udp (sock, buffer, server, current_buffer_position - buffer)) {
527
+ process_sent_msg (config, new_message.msg_type );
528
+ }
541
529
}
542
530
}
543
531
@@ -589,7 +577,9 @@ void relay_relay_forw(int sock, const uint8_t *msg, int32_t len, const ip6_hdr *
589
577
target_addr.sin6_port = htons (CLIENT_PORT);
590
578
target_addr.sin6_scope_id = if_nametoindex (config->interface .c_str ());
591
579
592
- send_udp (sock, buffer, target_addr, current_buffer_position - buffer, config, type);
580
+ if (send_udp (sock, buffer, target_addr, current_buffer_position - buffer)) {
581
+ process_sent_msg (config, type);
582
+ }
593
583
}
594
584
595
585
/* *
@@ -728,9 +718,9 @@ void callback_dual_tor(evutil_socket_t fd, short event, void *arg) {
728
718
return ;
729
719
std::string state;
730
720
std::string intf (interfaceName);
731
- redis_db. muxTable ->hget (intf, " state" , state);
721
+ config-> mux_table ->hget (intf, " state" , state);
732
722
733
- if (state != " standby" && redis_db. config_db ->exists (key.append (intf))) {
723
+ if (state != " standby" && config-> config_db ->exists (key.append (intf))) {
734
724
char * ptr = (char *)message_buffer;
735
725
const uint8_t *current_position = (uint8_t *)ptr;
736
726
const uint8_t *tmp = NULL ;
@@ -970,8 +960,6 @@ void loop_relay(std::vector<relay_config> *vlans) {
970
960
std::shared_ptr<swss::Table> mStateDbMuxTablePtr = std::make_shared<swss::Table> (
971
961
state_db.get (), " HW_MUX_CABLE_TABLE"
972
962
);
973
- redis_db.config_db = config_db;
974
- redis_db.muxTable = mStateDbMuxTablePtr ;
975
963
976
964
int filter = 0 ;
977
965
filter = sock_open (ðer_relay_fprog);
@@ -981,6 +969,8 @@ void loop_relay(std::vector<relay_config> *vlans) {
981
969
relay_config *config = &vlan;
982
970
int local_sock = 0 ;
983
971
int server_sock = 0 ;
972
+ config->config_db = config_db;
973
+ config->mux_table = mStateDbMuxTablePtr ;
984
974
config->state_db = state_db;
985
975
config->mux_key = vlan_member + config->interface + " |" ;
986
976
0 commit comments