2 * Copyright (C) 2013 Realtek Semiconductor Corp.
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
10 * Purpose : RTL8367/RTL8367C switch high-level API
12 * Feature : The file includes IGMP module high-layer API defination
16 #ifndef __RTK_API_IGMP_H__
17 #define __RTK_API_IGMP_H__
20 * Data Type Declaration
22 typedef enum rtk_igmp_type_e
31 typedef enum rtk_trap_igmp_action_e
33 IGMP_ACTION_FORWARD
= 0,
40 typedef enum rtk_igmp_protocol_e
48 } rtk_igmp_protocol_t
;
50 typedef enum rtk_igmp_tableFullAction_e
52 IGMP_TABLE_FULL_FORWARD
= 0,
55 IGMP_TABLE_FULL_OP_END
56 }rtk_igmp_tableFullAction_t
;
58 typedef enum rtk_igmp_checksumErrorAction_e
60 IGMP_CRC_ERR_DROP
= 0,
64 }rtk_igmp_checksumErrorAction_t
;
66 typedef enum rtk_igmp_bypassGroup_e
68 IGMP_BYPASS_224_0_0_X
= 0,
69 IGMP_BYPASS_224_0_1_X
,
70 IGMP_BYPASS_239_255_255_X
,
71 IGMP_BYPASS_IPV6_00XX
,
73 }rtk_igmp_bypassGroup_t
;
76 typedef struct rtk_igmp_dynamicRouterPort_s
78 rtk_enable_t dynamicRouterPort0Valid
;
79 rtk_port_t dynamicRouterPort0
;
80 rtk_uint32 dynamicRouterPort0Timer
;
81 rtk_enable_t dynamicRouterPort1Valid
;
82 rtk_port_t dynamicRouterPort1
;
83 rtk_uint32 dynamicRouterPort1Timer
;
85 }rtk_igmp_dynamicRouterPort_t
;
87 typedef struct rtk_igmp_rxPktEnable_s
90 rtk_enable_t rxReport
;
94 }rtk_igmp_rxPktEnable_t
;
96 typedef struct rtk_igmp_groupInfo_s
99 rtk_portmask_t member
;
100 rtk_uint32 timer
[RTK_PORT_MAX
];
101 rtk_uint32 reportSuppFlag
;
102 }rtk_igmp_groupInfo_t
;
104 typedef enum rtk_igmp_ReportLeaveFwdAct_e
106 IGMP_REPORT_LEAVE_TO_ROUTER
= 0,
107 IGMP_REPORT_LEAVE_TO_ALLPORT
,
108 IGMP_REPORT_LEAVE_TO_ROUTER_PORT_ADV
,
109 IGMP_REPORT_LEAVE_ACT_END
110 }rtk_igmp_ReportLeaveFwdAct_t
;
115 * This API enables H/W IGMP and set a default initial configuration.
122 * RT_ERR_FAILED - Failed
123 * RT_ERR_SMI - SMI access error
125 * This API enables H/W IGMP and set a default initial configuration.
127 extern rtk_api_ret_t
rtk_igmp_init(void);
132 * This API set H/W IGMP state.
134 * enabled - H/W IGMP state
139 * RT_ERR_FAILED - Failed
140 * RT_ERR_SMI - SMI access error
141 * RT_ERR_INPUT - Error parameter
143 * This API set H/W IGMP state.
145 extern rtk_api_ret_t
rtk_igmp_state_set(rtk_enable_t enabled
);
150 * This API get H/W IGMP state.
154 * pEnabled - H/W IGMP state
157 * RT_ERR_FAILED - Failed
158 * RT_ERR_SMI - SMI access error
159 * RT_ERR_INPUT - Error parameter
161 * This API set current H/W IGMP state.
163 extern rtk_api_ret_t
rtk_igmp_state_get(rtk_enable_t
*pEnabled
);
166 * rtk_igmp_static_router_port_set
168 * Configure static router port
170 * pPortmask - Static Port mask
175 * RT_ERR_FAILED - Failed
176 * RT_ERR_SMI - SMI access error
177 * RT_ERR_PORT_MASK - Error parameter
179 * This API set static router port
181 extern rtk_api_ret_t
rtk_igmp_static_router_port_set(rtk_portmask_t
*pPortmask
);
184 * rtk_igmp_static_router_port_get
186 * Get static router port
190 * pPortmask - Static port mask
193 * RT_ERR_FAILED - Failed
194 * RT_ERR_SMI - SMI access error
195 * RT_ERR_PORT_MASK - Error parameter
197 * This API get static router port
199 extern rtk_api_ret_t
rtk_igmp_static_router_port_get(rtk_portmask_t
*pPortmask
);
202 * rtk_igmp_protocol_set
204 * set IGMP/MLD protocol action
207 * protocol - IGMP/MLD protocol
208 * action - Per-port and per-protocol IGMP action seeting
213 * RT_ERR_FAILED - Failed
214 * RT_ERR_SMI - SMI access error
215 * RT_ERR_PORT_MASK - Error parameter
217 * This API set IGMP/MLD protocol action
219 extern rtk_api_ret_t
rtk_igmp_protocol_set(rtk_port_t port
, rtk_igmp_protocol_t protocol
, rtk_igmp_action_t action
);
222 * rtk_igmp_protocol_get
224 * set IGMP/MLD protocol action
227 * protocol - IGMP/MLD protocol
228 * action - Per-port and per-protocol IGMP action seeting
233 * RT_ERR_FAILED - Failed
234 * RT_ERR_SMI - SMI access error
235 * RT_ERR_PORT_MASK - Error parameter
237 * This API set IGMP/MLD protocol action
239 extern rtk_api_ret_t
rtk_igmp_protocol_get(rtk_port_t port
, rtk_igmp_protocol_t protocol
, rtk_igmp_action_t
*pAction
);
242 * rtk_igmp_fastLeave_set
244 * set IGMP/MLD FastLeave state
246 * state - ENABLED: Enable FastLeave, DISABLED: disable FastLeave
251 * RT_ERR_INPUT - Error Input
252 * RT_ERR_FAILED - Failed
253 * RT_ERR_SMI - SMI access error
255 * This API set IGMP/MLD FastLeave state
257 extern rtk_api_ret_t
rtk_igmp_fastLeave_set(rtk_enable_t state
);
260 * rtk_igmp_fastLeave_get
262 * get IGMP/MLD FastLeave state
266 * pState - ENABLED: Enable FastLeave, DISABLED: disable FastLeave
269 * RT_ERR_NULL_POINTER - NULL pointer
270 * RT_ERR_FAILED - Failed
271 * RT_ERR_SMI - SMI access error
273 * This API get IGMP/MLD FastLeave state
275 extern rtk_api_ret_t
rtk_igmp_fastLeave_get(rtk_enable_t
*pState
);
278 * rtk_igmp_maxGroup_set
280 * Set per port multicast group learning limit.
283 * group - The number of multicast group learning limit.
288 * RT_ERR_PORT_ID - Error Port ID
289 * RT_ERR_OUT_OF_RANGE - parameter out of range
290 * RT_ERR_FAILED - Failed
291 * RT_ERR_SMI - SMI access error
293 * This API set per port multicast group learning limit.
295 extern rtk_api_ret_t
rtk_igmp_maxGroup_set(rtk_port_t port
, rtk_uint32 group
);
298 * rtk_igmp_maxGroup_get
300 * Get per port multicast group learning limit.
304 * pGroup - The number of multicast group learning limit.
307 * RT_ERR_PORT_ID - Error Port ID
308 * RT_ERR_NULL_POINTER - Null pointer
309 * RT_ERR_FAILED - Failed
310 * RT_ERR_SMI - SMI access error
312 * This API get per port multicast group learning limit.
314 extern rtk_api_ret_t
rtk_igmp_maxGroup_get(rtk_port_t port
, rtk_uint32
*pGroup
);
317 * rtk_igmp_currentGroup_get
319 * Get per port multicast group learning count.
323 * pGroup - The number of multicast group learning count.
326 * RT_ERR_PORT_ID - Error Port ID
327 * RT_ERR_NULL_POINTER - Null pointer
328 * RT_ERR_FAILED - Failed
329 * RT_ERR_SMI - SMI access error
331 * This API get per port multicast group learning count.
333 extern rtk_api_ret_t
rtk_igmp_currentGroup_get(rtk_port_t port
, rtk_uint32
*pGroup
);
336 * rtk_igmp_tableFullAction_set
338 * set IGMP/MLD Table Full Action
340 * action - Table Full Action
345 * RT_ERR_INPUT - Error Input
346 * RT_ERR_FAILED - Failed
347 * RT_ERR_SMI - SMI access error
350 extern rtk_api_ret_t
rtk_igmp_tableFullAction_set(rtk_igmp_tableFullAction_t action
);
353 * rtk_igmp_tableFullAction_get
355 * get IGMP/MLD Table Full Action
359 * pAction - Table Full Action
362 * RT_ERR_NULL_POINTER - Null pointer
363 * RT_ERR_FAILED - Failed
364 * RT_ERR_SMI - SMI access error
367 extern rtk_api_ret_t
rtk_igmp_tableFullAction_get(rtk_igmp_tableFullAction_t
*pAction
);
370 * rtk_igmp_checksumErrorAction_set
372 * set IGMP/MLD Checksum Error Action
374 * action - Checksum error Action
379 * RT_ERR_INPUT - Error Input
380 * RT_ERR_FAILED - Failed
381 * RT_ERR_SMI - SMI access error
384 extern rtk_api_ret_t
rtk_igmp_checksumErrorAction_set(rtk_igmp_checksumErrorAction_t action
);
387 * rtk_igmp_checksumErrorAction_get
389 * get IGMP/MLD Checksum Error Action
393 * pAction - Checksum error Action
396 * RT_ERR_NULL_POINTER - Null pointer
397 * RT_ERR_FAILED - Failed
398 * RT_ERR_SMI - SMI access error
401 extern rtk_api_ret_t
rtk_igmp_checksumErrorAction_get(rtk_igmp_checksumErrorAction_t
*pAction
);
404 * rtk_igmp_leaveTimer_set
406 * set IGMP/MLD Leave timer
408 * timer - Leave timer
413 * RT_ERR_INPUT - Error Input
414 * RT_ERR_FAILED - Failed
415 * RT_ERR_SMI - SMI access error
418 extern rtk_api_ret_t
rtk_igmp_leaveTimer_set(rtk_uint32 timer
);
421 * rtk_igmp_leaveTimer_get
423 * get IGMP/MLD Leave timer
427 * pTimer - Leave Timer.
430 * RT_ERR_NULL_POINTER - Null pointer
431 * RT_ERR_FAILED - Failed
432 * RT_ERR_SMI - SMI access error
435 extern rtk_api_ret_t
rtk_igmp_leaveTimer_get(rtk_uint32
*pTimer
);
438 * rtk_igmp_queryInterval_set
440 * set IGMP/MLD Query Interval
442 * interval - Query Interval
447 * RT_ERR_INPUT - Error Input
448 * RT_ERR_FAILED - Failed
449 * RT_ERR_SMI - SMI access error
452 extern rtk_api_ret_t
rtk_igmp_queryInterval_set(rtk_uint32 interval
);
455 * rtk_igmp_queryInterval_get
457 * get IGMP/MLD Query Interval
461 * pInterval - Query Interval
464 * RT_ERR_NULL_POINTER - Null pointer
465 * RT_ERR_FAILED - Failed
466 * RT_ERR_SMI - SMI access error
469 extern rtk_api_ret_t
rtk_igmp_queryInterval_get(rtk_uint32
*pInterval
);
472 * rtk_igmp_robustness_set
474 * set IGMP/MLD Robustness value
476 * robustness - Robustness value
481 * RT_ERR_INPUT - Error Input
482 * RT_ERR_FAILED - Failed
483 * RT_ERR_SMI - SMI access error
486 extern rtk_api_ret_t
rtk_igmp_robustness_set(rtk_uint32 robustness
);
489 * rtk_igmp_robustness_get
491 * get IGMP/MLD Robustness value
495 * pRobustness - Robustness value.
498 * RT_ERR_NULL_POINTER - Null pointer
499 * RT_ERR_FAILED - Failed
500 * RT_ERR_SMI - SMI access error
503 extern rtk_api_ret_t
rtk_igmp_robustness_get(rtk_uint32
*pRobustness
);
506 * rtk_igmp_dynamicRouterRortAllow_set
508 * Configure dynamic router port allow option
510 * pPortmask - Dynamic Port allow mask
515 * RT_ERR_FAILED - Failed
516 * RT_ERR_SMI - SMI access error
517 * RT_ERR_PORT_MASK - Error parameter
521 extern rtk_api_ret_t
rtk_igmp_dynamicRouterPortAllow_set(rtk_portmask_t
*pPortmask
);
524 * rtk_igmp_dynamicRouterRortAllow_get
526 * Get dynamic router port allow option
530 * pPortmask - Dynamic Port allow mask
533 * RT_ERR_FAILED - Failed
534 * RT_ERR_SMI - SMI access error
535 * RT_ERR_PORT_MASK - Error parameter
539 extern rtk_api_ret_t
rtk_igmp_dynamicRouterPortAllow_get(rtk_portmask_t
*pPortmask
);
542 * rtk_igmp_dynamicRouterPort_get
544 * Get dynamic router port
548 * pDynamicRouterPort - Dynamic Router Port
551 * RT_ERR_FAILED - Failed
552 * RT_ERR_NULL_POINTER - Null pointer
553 * RT_ERR_SMI - SMI access error
554 * RT_ERR_PORT_MASK - Error parameter
558 extern rtk_api_ret_t
rtk_igmp_dynamicRouterPort_get(rtk_igmp_dynamicRouterPort_t
*pDynamicRouterPort
);
561 * rtk_igmp_suppressionEnable_set
563 * Configure IGMPv1/v2 & MLDv1 Report/Leave/Done suppression
565 * reportSuppression - Report suppression
566 * leaveSuppression - Leave suppression
571 * RT_ERR_FAILED - Failed
572 * RT_ERR_SMI - SMI access error
573 * RT_ERR_INPUT - Error Input
577 extern rtk_api_ret_t
rtk_igmp_suppressionEnable_set(rtk_enable_t reportSuppression
, rtk_enable_t leaveSuppression
);
580 * rtk_igmp_suppressionEnable_get
582 * Get IGMPv1/v2 & MLDv1 Report/Leave/Done suppression
586 * pReportSuppression - Report suppression
587 * pLeaveSuppression - Leave suppression
590 * RT_ERR_FAILED - Failed
591 * RT_ERR_SMI - SMI access error
592 * RT_ERR_NULL_POINTER - Null pointer
596 extern rtk_api_ret_t
rtk_igmp_suppressionEnable_get(rtk_enable_t
*pReportSuppression
, rtk_enable_t
*pLeaveSuppression
);
599 * rtk_igmp_portRxPktEnable_set
601 * Configure IGMP/MLD RX Packet configuration
604 * pRxCfg - RX Packet Configuration
609 * RT_ERR_FAILED - Failed
610 * RT_ERR_SMI - SMI access error
611 * RT_ERR_INPUT - Error Input
612 * RT_ERR_NULL_POINTER - Null pointer
616 extern rtk_api_ret_t
rtk_igmp_portRxPktEnable_set(rtk_port_t port
, rtk_igmp_rxPktEnable_t
*pRxCfg
);
619 * rtk_igmp_portRxPktEnable_get
621 * Get IGMP/MLD RX Packet configuration
624 * pRxCfg - RX Packet Configuration
629 * RT_ERR_FAILED - Failed
630 * RT_ERR_SMI - SMI access error
631 * RT_ERR_INPUT - Error Input
632 * RT_ERR_NULL_POINTER - Null pointer
636 extern rtk_api_ret_t
rtk_igmp_portRxPktEnable_get(rtk_port_t port
, rtk_igmp_rxPktEnable_t
*pRxCfg
);
639 * rtk_igmp_groupInfo_get
641 * Get IGMP/MLD Group database
643 * indes - Index (0~255)
645 * pGroup - Group database information.
648 * RT_ERR_FAILED - Failed
649 * RT_ERR_SMI - SMI access error
650 * RT_ERR_INPUT - Error Input
651 * RT_ERR_NULL_POINTER - Null pointer
655 extern rtk_api_ret_t
rtk_igmp_groupInfo_get(rtk_uint32 index
, rtk_igmp_groupInfo_t
*pGroup
);
658 * rtk_igmp_ReportLeaveFwdAction_set
660 * Set Report Leave packet forwarding action
667 * RT_ERR_FAILED - Failed
668 * RT_ERR_SMI - SMI access error
669 * RT_ERR_INPUT - Error Input
673 extern rtk_api_ret_t
rtk_igmp_ReportLeaveFwdAction_set(rtk_igmp_ReportLeaveFwdAct_t action
);
676 * rtk_igmp_ReportLeaveFwdAction_get
678 * Get Report Leave packet forwarding action
685 * RT_ERR_FAILED - Failed
686 * RT_ERR_SMI - SMI access error
687 * RT_ERR_INPUT - Error Input
688 * RT_ERR_NULL_POINTER - Null Pointer
692 extern rtk_api_ret_t
rtk_igmp_ReportLeaveFwdAction_get(rtk_igmp_ReportLeaveFwdAct_t
*pAction
);
695 * rtk_igmp_dropLeaveZeroEnable_set
697 * Set the function of droppping Leave packet with group IP = 0.0.0.0
699 * enabled - Action 1: drop, 0:pass
704 * RT_ERR_FAILED - Failed
705 * RT_ERR_SMI - SMI access error
706 * RT_ERR_INPUT - Error Input
710 extern rtk_api_ret_t
rtk_igmp_dropLeaveZeroEnable_set(rtk_enable_t enabled
);
713 * rtk_igmp_dropLeaveZeroEnable_get
715 * Get the function of droppping Leave packet with group IP = 0.0.0.0
719 * pEnabled. - Action 1: drop, 0:pass
722 * RT_ERR_FAILED - Failed
723 * RT_ERR_SMI - SMI access error
724 * RT_ERR_INPUT - Error Input
725 * RT_ERR_NULL_POINTER - Null Pointer
729 extern rtk_api_ret_t
rtk_igmp_dropLeaveZeroEnable_get(rtk_enable_t
*pEnabled
);
732 * rtk_igmp_bypassGroupRange_set
736 * group - bypassed group
737 * enabled - enabled 1: Bypassed, 0: not bypass
742 * RT_ERR_FAILED - Failed
743 * RT_ERR_SMI - SMI access error
744 * RT_ERR_INPUT - Error Input
748 extern rtk_api_ret_t
rtk_igmp_bypassGroupRange_set(rtk_igmp_bypassGroup_t group
, rtk_enable_t enabled
);
751 * rtk_igmp_bypassGroupRange_get
755 * group - bypassed group
757 * pEnable - enabled 1: Bypassed, 0: not bypass
760 * RT_ERR_FAILED - Failed
761 * RT_ERR_SMI - SMI access error
762 * RT_ERR_INPUT - Error Input
763 * RT_ERR_NULL_POINTER - Null Pointer
767 extern rtk_api_ret_t
rtk_igmp_bypassGroupRange_get(rtk_igmp_bypassGroup_t group
, rtk_enable_t
*pEnable
);
769 #endif /* __RTK_API_IGMP_H__ */