@@ -316,6 +316,7 @@ void recv_dhcp_server_msg(void *cb_res)
316
316
memcpy (msg_tr_ptr -> addr .address ,relay_msg .peer_address , 16 );
317
317
msg_ptr = relay_msg .relay_options .msg_ptr ;
318
318
msg_len = relay_msg .relay_options .len ;
319
+ msg_type = * msg_ptr ;
319
320
320
321
321
322
} else if (msg_type == DHCPV6_RELAY_REPLY ) {
@@ -383,7 +384,7 @@ void recv_dhcp_relay_msg(void *cb_res)
383
384
msg_iov [0 ].iov_len = 34 ;
384
385
msg_iov [1 ].iov_base = ns_dyn_mem_temporary_alloc (sckt_data -> d_len );
385
386
msg_iov [1 ].iov_len = sckt_data -> d_len ;
386
- if (msg_iov [2 ].iov_base == NULL ) {
387
+ if (msg_iov [1 ].iov_base == NULL ) {
387
388
// read actual message
388
389
tr_error ("Out of resources" );
389
390
goto cleanup ;
@@ -426,7 +427,7 @@ void recv_dhcp_relay_msg(void *cb_res)
426
427
//Copy DST address
427
428
memcpy (src_address .address , relay_msg .peer_address , 16 );
428
429
src_address .type = ADDRESS_IPV6 ;
429
- src_address .identifier = DHCPV6_SERVER_PORT ;
430
+ src_address .identifier = DHCPV6_CLIENT_PORT ;
430
431
msghdr .msg_iov = & msg_iov [0 ];
431
432
msghdr .msg_iovlen = 1 ;
432
433
msg_iov [0 ].iov_base = relay_msg .relay_options .msg_ptr ;
@@ -545,7 +546,7 @@ uint16_t dhcp_service_init(int8_t interface_id, dhcp_instance_type_e instance_ty
545
546
if (dhcp_service -> dhcp_server_socket >= 0 ) {
546
547
tr_error ("dhcp Relay agent can't open because server open already" );
547
548
}
548
- dhcp_service -> dhcp_relay_socket = socket_open (SOCKET_UDP , DHCPV6_SERVER_PORT , recv_dhcp_server_msg );
549
+ dhcp_service -> dhcp_relay_socket = socket_open (SOCKET_UDP , DHCPV6_SERVER_PORT , recv_dhcp_relay_msg );
549
550
}
550
551
551
552
if (instance_type == DHCP_INSTANCE_CLIENT && dhcp_service -> dhcp_client_socket < 0 ) {
@@ -654,7 +655,7 @@ void dhcp_service_delete(uint16_t instance)
654
655
}
655
656
}
656
657
657
- if ((server_instances == 0 || relay_instances == 0 ) && dhcp_service -> dhcp_server_socket > -1 ) {
658
+ if ((server_instances == 0 && relay_instances == 0 ) && dhcp_service -> dhcp_server_socket > -1 ) {
658
659
socket_close (dhcp_service -> dhcp_server_socket );
659
660
dhcp_service -> dhcp_server_socket = -1 ;
660
661
}
0 commit comments