@@ -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 ;
0 commit comments