Skip to content

Commit 82b6bcf

Browse files
MCLAG enhacements ICCPd initial code commit (#4819)
* MCLAG enhacements ICCPd initial code commit * Resolving the merge conflicts with orighin * L3 MCLAG Enhancements and Unique IP Changes. * Addressed review comments Co-authored-by: Tapash Das <[email protected]>
1 parent d26307d commit 82b6bcf

38 files changed

+8501
-1389
lines changed

src/iccpd/include/iccp_cli.h

+15-12
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ typedef enum
3636

3737
typedef struct cli_param_queue
3838
{
39-
char ifname[16];
39+
char ifname[16];
4040
cli_queue_type_et type;
41-
int param;
42-
int itf_add;
41+
int param;
42+
int itf_add;
4343
LIST_ENTRY(cli_param_queue) cli_queue_next;
4444
} cli_param_queue_st;
4545

@@ -50,18 +50,21 @@ typedef struct cli_param_queue
5050
#define MCLAG_INTF_STR "mclag_interface"
5151
#define SYSTEM_MAC_STR "system_mac"
5252

53-
int set_mc_lag_id(struct CSM* csm, uint16_t domain);
54-
int set_peer_link(int mid, const char* ifname);
55-
int set_local_address(int mid, const char* addr);
56-
int set_peer_address(int mid, const char* addr);
57-
int unset_mc_lag_id(struct CSM* csm, uint16_t domain);
53+
int set_mc_lag_id(struct CSM *csm, uint16_t domain);
54+
int set_peer_link(int mid, const char *ifname);
55+
int set_local_address(int mid, const char *addr);
56+
int set_peer_address(int mid, const char *addr);
57+
int unset_mc_lag_id(struct CSM *csm, uint16_t domain);
5858
int unset_peer_link(int mid);
5959
int unset_local_address(int mid);
6060
int unset_peer_address(int mid);
6161

62-
int iccp_cli_attach_mclag_domain_to_port_channel(int domain, const char* ifname);
63-
int iccp_cli_detach_mclag_domain_to_port_channel(const char* ifname);
64-
int set_local_system_id(const char* mac);
65-
int unset_local_system_id( );
62+
int iccp_cli_attach_mclag_domain_to_port_channel(int domain, const char *ifname);
63+
int iccp_cli_detach_mclag_domain_to_port_channel(const char *ifname);
64+
int set_local_system_id(const char *mac);
65+
int unset_local_system_id();
66+
67+
int set_keepalive_time(int mid, int keepalive_time);
68+
int set_session_timeout(int mid, int session_timeout_val);
6669

6770
#endif

src/iccpd/include/iccp_cmd.h

+3
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@
2626

2727
int iccp_config_from_file(char *config_default_dir);
2828

29+
int set_mc_lag_by_id(uint16_t mid);
30+
int unset_mc_lag_by_id(uint16_t mid);
31+
2932
#endif /* ICCP_CMD_H_ */

src/iccpd/include/iccp_cmd_show.h

+2
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ extern int iccp_ndisc_dump(char * *buf, int *num, int mclag_id);
3333
extern int iccp_mac_dump(char * *buf, int *num, int mclag_id);
3434
extern int iccp_local_if_dump(char * *buf, int *num, int mclag_id);
3535
extern int iccp_peer_if_dump(char * *buf, int *num, int mclag_id);
36+
extern int iccp_cmd_dbg_counter_dump(char * *buf, int *data_len, int mclag_id);
37+
extern int iccp_unique_ip_if_dump(char * *buf, int *num, int mclag_id);
3638
#endif

src/iccpd/include/iccp_csm.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@
4545

4646
#ifndef INET_ADDRSTRLEN
4747
#define INET_ADDRSTRLEN 16
48-
#endif /* INET_ADDRSTRLEN */
48+
#endif /* INET_ADDRSTRLEN */
4949
#ifndef INET6_ADDRSTRLEN
5050
#define INET6_ADDRSTRLEN 46
51-
#endif /* INET6_ADDRSTRLEN */
51+
#endif /* INET6_ADDRSTRLEN */
5252
/* For socket binding */
5353
#define ICCP_TCP_PORT 8888
5454
#define MAX_ACCEPT_CONNETIONS 20
@@ -113,10 +113,15 @@ struct CSM
113113
time_t peer_warm_reboot_time;
114114
time_t warm_reboot_disconn_time;
115115
char peer_itf_name[IFNAMSIZ];
116+
time_t peer_link_learning_retry_time;
116117
char peer_ip[INET_ADDRSTRLEN];
117118
char sender_ip[INET_ADDRSTRLEN];
118119
void* sock_read_event_ptr;
119120

121+
int keepalive_time;
122+
int session_timeout;
123+
int peer_link_learning_enable;
124+
120125
/* Msg queue */
121126
TAILQ_HEAD(msg_list, Msg) msg_list;
122127

@@ -164,5 +169,5 @@ void iccp_csm_correspond_from_rg_connect_msg(struct CSM*, struct Msg*);
164169
void iccp_csm_correspond_from_rg_disconnect_msg(struct CSM*, struct Msg*);
165170

166171
int mlacp_bind_port_channel_to_csm(struct CSM* csm, const char *ifname);
167-
172+
int iccp_csm_init_mac_msg(struct MACMsg **mac_msg, char* data, int len);
168173
#endif /* ICCP_CSM_H_ */

src/iccpd/include/iccp_ifm.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ int do_one_neigh_request(struct nlmsghdr *n);
3737

3838
void iccp_from_netlink_port_state_handler( char * ifname, int state);
3939

40-
void iccp_parse_if_vlan_info_from_netlink(struct nlmsghdr *n);
40+
void vlan_mbrship_change_handler(unsigned int vlan_id, char *mbr_if_name, int add_flag);
41+
void del_all_pending_vlan_mbr_ifs(struct System *sys);
42+
void move_pending_vlan_mbr_to_lif(struct System *sys, struct LocalInterface* lif);
4143
#endif // LACP_IFM_H
4244

src/iccpd/include/iccp_netlink.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
#include <stdarg.h>
2727
#include <unistd.h>
2828
#include <netlink/netlink.h>
29-
3029
#include <linux/types.h>
31-
3230
#include "../include/system.h"
3331
#include "../include/port.h"
3432
#include <netinet/icmp6.h>
@@ -37,6 +35,7 @@
3735
#define NDISC_NEIGHBOUR_ADVERTISEMENT 136
3836
#define ND_OPT_TARGET_LL_ADDR 2
3937
#define NEXTHDR_ICMP 58
38+
#define ICCP_NLE_SEQ_MISMATCH -16
4039

4140
struct nd_msg
4241
{
@@ -51,17 +50,20 @@ struct in6_pktinfo
5150
unsigned int ipi6_ifindex; /* send/recv interface index */
5251
};
5352

54-
int iccp_get_port_member_list(struct LocalInterface* lif);
53+
int iccp_get_port_member_list(struct LocalInterface *lif);
5554
void iccp_event_handler_obj_input_newlink(struct nl_object *obj, void *arg);
5655
void iccp_event_handler_obj_input_dellink(struct nl_object *obj, void *arg);
5756
int iccp_system_init_netlink_socket();
5857
void iccp_system_dinit_netlink_socket();
5958
int iccp_init_netlink_event_fd(struct System *sys);
60-
int iccp_handle_events(struct System * sys);
61-
void update_if_ipmac_on_standby(struct LocalInterface* lif_po);
59+
int iccp_handle_events(struct System *sys);
60+
void update_if_ipmac_on_standby(struct LocalInterface *lif_po, int dir);
6261
int iccp_sys_local_if_list_get_addr();
63-
int iccp_netlink_neighbor_request(int family, uint8_t *addr, int add, uint8_t *mac, char *portname);
62+
int iccp_netlink_neighbor_request(int family, uint8_t *addr, int add, uint8_t *mac, char *portname, int permanent, int dir);
6463
int iccp_check_if_addr_from_netlink(int family, uint8_t *addr, struct LocalInterface *lif);
6564

65+
void recover_if_ipmac_on_standby(struct LocalInterface* lif_po, int dir);
66+
void update_vlan_if_mac_on_standby(struct LocalInterface* lif_vlan, int dir);
67+
void recover_vlan_if_mac_on_standby(struct LocalInterface* lif_vlan, int dir, uint8_t *remote_system_mac);
68+
void update_vlan_if_mac_on_iccp_up(struct LocalInterface* lif_peer, int is_up, uint8_t *remote_system_mac);
6669
#endif
67-

src/iccpd/include/logger.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
typedef enum _iccpd_log_level_t
3333
{
3434
CRITICAL_LOG_LEVEL = 0,
35-
ERR_LOG_LEVEL = 1,
35+
ERR_LOG_LEVEL = 1,
3636
WARN_LOG_LEVEL = 2,
3737
NOTICE_LOG_LEVEL = 3,
3838
INFO_LOG_LEVEL = 4,

src/iccpd/include/mlacp_fsm.h

+93-3
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@
2626
#define _MLACP_FSM_H
2727

2828
#include "../include/port.h"
29+
#include "../include/mlacp_tlv.h"
2930

3031
#define MLCAP_SYNC_PHY_DEV_SEC 1 /*every 1 sec*/
3132

33+
#define MLACP_LOCAL_IF_DOWN_TIMER 600 // 600 seconds.
34+
3235
#define MLACP(csm_ptr) (csm_ptr->app_csm.mlacp)
3336

3437
struct CSM;
@@ -47,7 +50,7 @@ typedef enum MLACP_APP_STATE MLACP_APP_STATE_E;
4750
/* for sender only*/
4851
enum MLACP_SYNC_STATE
4952
{
50-
MLACP_SYNC_SYSCONF=0,
53+
MLACP_SYNC_SYSCONF = 0,
5154
MLACP_SYNC_AGGCONF,
5255
MLACP_SYNC_AGGSTATE,
5356
MLACP_SYNC_AGGINFO,
@@ -66,6 +69,85 @@ struct Remote_System
6669
uint32_t node_id;
6770
};
6871

72+
/****************************************************************
73+
* Debug counters to track message sent and received between
74+
* MC-LAG peers over ICCP
75+
***************************************************************/
76+
typedef uint8_t ICCP_DBG_CNTR_DIR_e;
77+
enum ICCP_DBG_CNTR_DIR_e
78+
{
79+
ICCP_DBG_CNTR_DIR_TX = 0,
80+
ICCP_DBG_CNTR_DIR_RX = 1,
81+
ICCP_DBG_CNTR_DIR_MAX
82+
};
83+
84+
typedef uint8_t ICCP_DBG_CNTR_STS_e;
85+
enum ICCP_DBG_CNTR_STS_e
86+
{
87+
ICCP_DBG_CNTR_STS_OK = 0,
88+
ICCP_DBG_CNTR_STS_ERR = 1, /* Send error or receive processing error*/
89+
ICCP_DBG_CNTR_STS_MAX
90+
};
91+
92+
/* Change MCLAGDCTL_MAX_DBG_COUNTERS if ICCP_DBG_CNTR_MSG_MAX is more than 32 */
93+
enum ICCP_DBG_CNTR_MSG
94+
{
95+
ICCP_DBG_CNTR_MSG_SYS_CONFIG = 0,
96+
ICCP_DBG_CNTR_MSG_AGGR_CONFIG = 1,
97+
ICCP_DBG_CNTR_MSG_AGGR_STATE = 2,
98+
ICCP_DBG_CNTR_MSG_MAC_INFO = 3,
99+
ICCP_DBG_CNTR_MSG_ARP_INFO = 4,
100+
ICCP_DBG_CNTR_MSG_L2MC_INFO = 5,
101+
ICCP_DBG_CNTR_MSG_PORTCHANNEL_INFO = 6,
102+
ICCP_DBG_CNTR_MSG_PEER_LINK_INFO = 7,
103+
ICCP_DBG_CNTR_MSG_HEART_BEAT = 8,
104+
ICCP_DBG_CNTR_MSG_NAK = 9,
105+
ICCP_DBG_CNTR_MSG_SYNC_DATA = 10,
106+
ICCP_DBG_CNTR_MSG_SYNC_REQ = 11,
107+
ICCP_DBG_CNTR_MSG_WARM_BOOT = 12,
108+
ICCP_DBG_CNTR_MSG_IF_UP_ACK = 13,
109+
ICCP_DBG_CNTR_MSG_STP_CONNECT = 14,
110+
ICCP_DBG_CNTR_MSG_STP_DISCONNECT = 15,
111+
ICCP_DBG_CNTR_MSG_STP_SYSTEM_CONFIG = 16,
112+
ICCP_DBG_CNTR_MSG_STP_REGION_NAME = 17,
113+
ICCP_DBG_CNTR_MSG_STP_REVISION_LEVEL = 18,
114+
ICCP_DBG_CNTR_MSG_STP_INSTANCE_PRIORITY = 19,
115+
ICCP_DBG_CNTR_MSG_STP_CONFIGURATION_DIGEST = 20,
116+
ICCP_DBG_CNTR_MSG_STP_TC_INSTANCES = 21,
117+
ICCP_DBG_CNTR_MSG_STP_ROOT_TIME_PARAM = 22,
118+
ICCP_DBG_CNTR_MSG_STP_MIST_ROOT_TIME_PARAM = 23,
119+
ICCP_DBG_CNTR_MSG_STP_SYNC_REQ = 24,
120+
ICCP_DBG_CNTR_MSG_STP_SYNC_DATA = 25,
121+
ICCP_DBG_CNTR_MSG_STP_PO_PORT_MAP = 26,
122+
ICCP_DBG_CNTR_MSG_STP_AGE_OUT = 27,
123+
ICCP_DBG_CNTR_MSG_STP_COMMON_MSG = 28,
124+
ICCP_DBG_CNTR_MSG_MAX
125+
};
126+
typedef enum ICCP_DBG_CNTR_MSG ICCP_DBG_CNTR_MSG_e;
127+
128+
/* Count messages sent to MCLAG peer */
129+
#define MLACP_SET_ICCP_TX_DBG_COUNTER(csm, tlv_type, status)\
130+
do{\
131+
ICCP_DBG_CNTR_MSG_e dbg_type;\
132+
dbg_type = mlacp_fsm_iccp_to_dbg_msg_type(tlv_type);\
133+
if (csm && ((dbg_type) < ICCP_DBG_CNTR_MSG_MAX) && ((status) < ICCP_DBG_CNTR_STS_MAX))\
134+
++MLACP(csm).dbg_counters.iccp_counters[dbg_type][ICCP_DBG_CNTR_DIR_TX][status];\
135+
}while(0);
136+
137+
/* Count messages received from MCLAG peer */
138+
#define MLACP_SET_ICCP_RX_DBG_COUNTER(csm, tlv_type, status)\
139+
do{\
140+
ICCP_DBG_CNTR_MSG_e dbg_type;\
141+
dbg_type = mlacp_fsm_iccp_to_dbg_msg_type(tlv_type);\
142+
if (csm && ((dbg_type) < ICCP_DBG_CNTR_MSG_MAX) && ((status) < ICCP_DBG_CNTR_STS_MAX))\
143+
++MLACP(csm).dbg_counters.iccp_counters[dbg_type][ICCP_DBG_CNTR_DIR_RX][status];\
144+
}while(0);
145+
146+
typedef struct mlacp_dbg_counter_info
147+
{
148+
uint64_t iccp_counters[ICCP_DBG_CNTR_MSG_MAX][ICCP_DBG_CNTR_DIR_MAX][ICCP_DBG_CNTR_STS_MAX];
149+
}mlacp_dbg_counter_info_t;
150+
69151
struct mLACP
70152
{
71153
int id;
@@ -88,22 +170,30 @@ struct mLACP
88170
TAILQ_HEAD(arp_info_list, Msg) arp_list;
89171
TAILQ_HEAD(ndisc_msg_list, Msg) ndisc_msg_list;
90172
TAILQ_HEAD(ndisc_info_list, Msg) ndisc_list;
91-
TAILQ_HEAD(mac_msg_list, Msg) mac_msg_list;
92-
TAILQ_HEAD(mac_info_list, Msg) mac_list;
173+
TAILQ_HEAD(mac_msg_list, MACMsg) mac_msg_list;
174+
175+
struct mac_rb_tree mac_rb;
93176

94177
LIST_HEAD(lif_list, LocalInterface) lif_list;
95178
LIST_HEAD(lif_purge_list, LocalInterface) lif_purge_list;
96179
LIST_HEAD(pif_list, PeerInterface) pif_list;
180+
181+
/* ICCP message tx/rx debug counters */
182+
mlacp_dbg_counter_info_t dbg_counters;
97183
};
98184

99185
void mlacp_init(struct CSM* csm, int all);
100186
void mlacp_finalize(struct CSM* csm);
101187
void mlacp_fsm_transit(struct CSM* csm);
102188
void mlacp_enqueue_msg(struct CSM*, struct Msg*);
103189
struct Msg* mlacp_dequeue_msg(struct CSM*);
190+
char* mlacp_state(struct CSM* csm);
104191

105192
/* from app_csm*/
106193
extern int mlacp_bind_local_if(struct CSM* csm, struct LocalInterface* local_if);
107194
extern int mlacp_unbind_local_if(struct LocalInterface* local_if);
108195

196+
/* Debug counter API */
197+
ICCP_DBG_CNTR_MSG_e mlacp_fsm_iccp_to_dbg_msg_type(uint32_t tlv_type);
198+
109199
#endif /* _MLACP_HANDLER_H */

src/iccpd/include/mlacp_link_handler.h

+41-4
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@
2323
#ifndef __MLACP_LINK_HANDLER__
2424
#define __MLACP_LINK_HANDLER__
2525

26+
#include <stdbool.h>
2627
#include "../include/iccp_csm.h"
2728
#include "../include/mlacp_tlv.h"
2829

30+
#define MCLAG_MAX_MSG_LEN 4096
31+
#define ICCP_MLAGSYNCD_SEND_MSG_BUFFER_SIZE MCLAG_MAX_MSG_LEN
32+
#define ICCP_MLAGSYNCD_RECV_MSG_BUFFER_SIZE (MCLAG_MAX_MSG_LEN * 256)
33+
34+
extern char g_iccp_recv_buf[];
35+
2936
/*****************************************
3037
* Link Handler
3138
*
@@ -43,18 +50,48 @@ void set_peerlink_mlag_port_learn(struct LocalInterface *lif, int enable);
4350
void peerlink_port_isolate_cleanup(struct CSM* csm);
4451
void update_peerlink_isolate_from_all_csm_lif(struct CSM* csm);
4552

46-
void del_mac_from_chip(struct MACMsg *mac_msg);
47-
void add_mac_to_chip(struct MACMsg *mac_msg, uint8_t mac_type);
48-
uint8_t set_mac_local_age_flag(struct CSM *csm, struct MACMsg *mac_msg, uint8_t set);
49-
void iccp_get_fdb_change_from_syncd(void);
53+
ssize_t iccp_send_to_mclagsyncd(uint8_t msg_type, char *send_buff, uint16_t send_len);
54+
55+
void del_mac_from_chip(struct MACMsg* mac_msg);
56+
void add_mac_to_chip(struct MACMsg* mac_msg, uint8_t mac_type);
57+
uint8_t set_mac_local_age_flag(struct CSM *csm, struct MACMsg* mac_msg, uint8_t set, uint8_t update_peer);
5058

5159
extern int mclagd_ctl_sock_create();
5260
extern int mclagd_ctl_sock_accept(int fd);
5361
extern int mclagd_ctl_interactive_process(int client_fd);
5462
extern int parseMacString(const char *str_mac, uint8_t *bin_mac);
63+
5564
char *show_ip_str(uint32_t ipv4_addr);
5665
char *show_ipv6_str(char *ipv6_addr);
5766

5867
void syncd_info_close();
5968
int iccp_connect_syncd();
69+
70+
void mlacp_link_disable_traffic_distribution(struct LocalInterface *lif);
71+
void mlacp_link_enable_traffic_distribution(struct LocalInterface *lif);
72+
int mlacp_link_set_iccp_state(int mlag_id, bool is_oper_up);
73+
int mlacp_link_set_iccp_role(int mlag_id, bool is_active_role, uint8_t *system_id);
74+
int mlacp_link_set_iccp_system_id(int mlag_id, uint8_t *system_id);
75+
int mlacp_link_del_iccp_info(int mlag_id);
76+
int mlacp_link_set_remote_if_state(int mlag_id, char *po_name, bool is_oper_up);
77+
int mlacp_link_del_remote_if_info(int mlag_id, char *po_name);
78+
int mlacp_link_set_peerlink_port_isolation(int mlag_id, char *po_name, bool is_isolation_enable);
79+
80+
void mlacp_mlag_intf_detach_handler(struct CSM* csm, struct LocalInterface* local_if);
81+
void mlacp_peer_mlag_intf_delete_handler(struct CSM* csm, char *mlag_if_name);
82+
83+
int iccp_mclagsyncd_msg_handler(struct System *sys);
84+
int syn_local_neigh_mac_info_to_peer(struct LocalInterface *local_if, int sync_add,
85+
int is_v4, int is_v6, int sync_mac, int ack, int is_ipv6_ll, int dir);
86+
int syn_local_mac_info_to_peer(struct CSM* csm, struct LocalInterface *local_if, int sync_add, int is_sag);
87+
int syn_local_arp_info_to_peer(struct CSM* csm, struct LocalInterface *local_if, int sync_add, int ack);
88+
int syn_local_nd_info_to_peer(struct CSM* csm, struct LocalInterface *local_if, int sync_add, int ack, int is_ipv6_ll, int dir);
89+
int syn_ack_local_neigh_mac_info_to_peer(char *ifname, int is_ipv6_ll);
90+
int is_unique_ip_configured(char *ifname);
91+
void set_peerlink_learn_kernel(struct CSM* csm, int enable, int dir);
92+
void set_peer_mac_in_kernel(char *mac, int vlan, int add);
93+
void mlacp_fix_bridge_mac(struct CSM* csm);
94+
void update_orphan_port_mac(struct CSM *csm, struct LocalInterface *lif, int state);
95+
void mlacp_convert_remote_mac_to_local(struct CSM *csm, char *po_name);
96+
int sync_unique_ip();
6097
#endif

src/iccpd/include/mlacp_sync_prepare.h

+10-3
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,19 @@ int mlacp_prepare_for_sync_request_tlv(struct CSM* csm, char* buf, size_t max_bu
4545
int mlacp_prepare_for_sync_data_tlv(struct CSM* csm, char* buf, size_t max_buf_size, int end);
4646
int mlacp_prepare_for_sys_config(struct CSM* csm, char* buf, size_t max_buf_size);
4747
int mlacp_prepare_for_mac_info_to_peer(struct CSM* csm, char* buf, size_t max_buf_size, struct MACMsg* mac_msg, int count);
48-
int mlacp_prepare_for_arp_info(struct CSM* csm, char* buf, size_t max_buf_size, struct ARPMsg* arp_msg, int count);
49-
int mlacp_prepare_for_ndisc_info(struct CSM *csm, char *buf, size_t max_buf_size, struct NDISCMsg *ndisc_msg, int count);
48+
int mlacp_prepare_for_arp_info(struct CSM* csm, char* buf, size_t max_buf_size, struct ARPMsg* arp_msg, int count, int dir);
49+
int mlacp_prepare_for_ndisc_info(struct CSM *csm, char *buf, size_t max_buf_size, struct NDISCMsg *ndisc_msg, int count, int dir);
5050
int mlacp_prepare_for_heartbeat(struct CSM* csm, char* buf, size_t max_buf_size);
5151
int mlacp_prepare_for_Aggport_state(struct CSM* csm, char* buf, size_t max_buf_size, struct LocalInterface* local_if);
5252
int mlacp_prepare_for_Aggport_config(struct CSM* csm, char* buf, size_t max_buf_size, struct LocalInterface* lif, int purge_flag);
5353
int mlacp_prepare_for_port_channel_info(struct CSM* csm, char* buf, size_t max_buf_size, struct LocalInterface* port_channel);
5454
int mlacp_prepare_for_port_peerlink_info(struct CSM* csm, char* buf, size_t max_buf_size, struct LocalInterface* peerlink_port);
5555
int iccp_netlink_if_hwaddr_set(uint32_t ifindex, uint8_t *addr, unsigned int addr_len);
56-
#endif
56+
int mlacp_prepare_for_if_up_ack(
57+
struct CSM *csm,
58+
char *buf,
59+
size_t max_buf_size,
60+
uint8_t if_type,
61+
uint16_t if_id,
62+
uint8_t port_isolation_enable);
63+
#endif

0 commit comments

Comments
 (0)