Skip to content

Commit a0f5e49

Browse files
committed
fix a10nsp dynamic interfaces
1 parent 000ebc8 commit a0f5e49

2 files changed

Lines changed: 17 additions & 12 deletions

File tree

code/bngblaster/src/bbl_a10nsp.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,7 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface,
771771

772772
bbl_lag_s *lag;
773773
bbl_lag_member_s *member;
774+
io_handle_s *io_new;
774775
uint8_t key;
775776

776777
while(stream) {
@@ -784,25 +785,18 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface,
784785
LOG(DEBUG, "A10NSP (ID: %u) Change TX interface of stream %lu from %s to %s\n",
785786
session->session_id, stream->flow_id, stream->tx_a10nsp_interface->name, interface->name);
786787

787-
stream->tx_a10nsp_interface = interface;
788-
stream->update_pps = true;
789-
790-
if(stream->io) {
791-
stream->io->update_streams = true;
792-
}
793-
794788
if(stream->lag) {
795789
/* Remove stream from LAG interface */
796790
lag = stream->tx_a10nsp_interface->interface->lag;
797791
stream_next = lag->stream_head;
798792
stream_prev = NULL;
799793
while(stream_next) {
800794
if(stream_next == stream) {
801-
lag->stream_count--;
795+
if(lag->stream_count) lag->stream_count--;
802796
if(stream_prev) {
803797
stream_prev->lag_next = stream->lag_next;
804798
} else {
805-
lag->stream_head = stream_next;
799+
lag->stream_head = stream->lag_next;
806800
}
807801
stream->lag = false;
808802
stream->lag_next = NULL;
@@ -813,6 +807,7 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface,
813807
}
814808
}
815809
}
810+
stream->tx_a10nsp_interface = interface;
816811

817812
/* Move stream */
818813
if(interface->interface->type == LAG_INTERFACE) {
@@ -827,12 +822,18 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface,
827822
} else {
828823
member = CIRCLEQ_FIRST(&lag->lag_member_qhead);
829824
}
830-
stream->io = member->interface->io.tx;
831-
stream->tx_interface = member->interface;
825+
io_new = member->interface->io.tx;
826+
stream->tx_interface = lag->interface;
832827
} else {
833-
stream->io = interface->interface->io.tx;
828+
io_new = interface->interface->io.tx;
834829
stream->tx_interface = interface->interface;
835830
}
831+
if(stream->io) {
832+
stream->update_pps = true;
833+
stream->io->update_streams = true;
834+
} else {
835+
io_stream_add(io_new, stream);
836+
}
836837
}
837838
}
838839
stream = stream->session_next;

code/bngblaster/src/bbl_rx.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ bbl_rx_handler(bbl_interface_s *interface,
105105
return;
106106
}
107107

108+
if(interface->state == INTERFACE_DOWN) {
109+
return;
110+
}
111+
108112
/* Traffic for emulated A10NSP switches (over network interfaces). */
109113
if(interface->a10nsp && eth->mpls && eth->type == ETH_TYPE_ETH) {
110114
((bbl_ethernet_header_s*)eth->next)->mpls = eth->mpls;

0 commit comments

Comments
 (0)