openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

traverse_client.c (144212B)


      1 /*
      2  * DO NOT EDIT THIS FILE!
      3  * This file is auto-generated.
      4  * Edits to this file will be lost when it is regenerated.
      5  *
      6  * 
      7  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      8  * 
      9  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
     10  *
     11  * File:	traverse_client.c
     12  * Purpose:	BCM API Traverse Server routines for remote units
     13  * Generator:	mkdispatch 1.54
     14  */
     15 
     16 #include <shared/alloc.h>
     17 #include <bcm/types.h>
     18 #include <bcm/bregex.h>
     19 #include <bcm/cosq.h>
     20 #include <bcm/extender.h>
     21 #include <bcm/fabric.h>
     22 #include <bcm/fcoe.h>
     23 #include <bcm/field.h>
     24 #include <bcm/flow.h>
     25 #include <bcm/flowtracker.h>
     26 #include <bcm/hash.h>
     27 #include <bcm/instru.h>
     28 #include <bcm/ipfix.h>
     29 #include <bcm/ipmc.h>
     30 #include <bcm/l2.h>
     31 #include <bcm/l2gre.h>
     32 #include <bcm/l3.h>
     33 #include <bcm/mim.h>
     34 #include <bcm/mirror.h>
     35 #include <bcm/mpls.h>
     36 #include <bcm/multicast.h>
     37 #include <bcm/nat.h>
     38 #include <bcm/niv.h>
     39 #include <bcm/oam.h>
     40 #include <bcm/policer.h>
     41 #include <bcm/port.h>
     42 #include <bcm/proxy.h>
     43 #include <bcm/pstats.h>
     44 #include <bcm/range.h>
     45 #include <bcm/sat.h>
     46 #include <bcm/srv6.h>
     47 #include <bcm/subport.h>
     48 #include <bcm/switch.h>
     49 #include <bcm/time.h>
     50 #include <bcm/trill.h>
     51 #include <bcm/trunk.h>
     52 #include <bcm/tsn.h>
     53 #include <bcm/tunnel.h>
     54 #include <bcm/vlan.h>
     55 #include <bcm/vswitch.h>
     56 #include <bcm/vxlan.h>
     57 #include <bcm/wlan.h>
     58 
     59 #include <bcm_int/rpc/pack.h>
     60 #include "traverse.h"
     61 
     62 #ifdef	BCM_RPC_SUPPORT
     63 
     64 
     65 int
     66 bcm_client_cosq_gport_traverse(
     67 	int	unit,
     68 	bcm_cosq_gport_traverse_cb	cb,
     69 	void *	user_data)
     70 {
     71 	bcm_rlink_traverse_data_t	r_req;
     72 	int	r_rv;
     73 	uint32	r_key[] = {
     74 		0xcdd16376,0x9b8ac79f,0xd0b2074a,0x456f0101,0xb667687c };
     75 	bcm_gport_t	r_port;
     76 	int	r_numq;
     77 	uint32	r_flags;
     78 	bcm_gport_t	r_gport;
     79 
     80 	sal_memset(&r_req, 0, sizeof(r_req));
     81 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
     82 	if (BCM_SUCCESS(r_rv)) {
     83 		/* Pack request */
     84 		/* Skip unit */
     85 
     86 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
     87 			/* Unpack reply */
     88 			/* Skip unit */
     89 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
     90 			BCM_UNPACK_U32(r_req.rx_ptr, r_numq);
     91 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
     92 			BCM_UNPACK_U32(r_req.rx_ptr, r_gport);
     93 
     94 			r_rv = cb(unit, r_port, r_numq, r_flags, r_gport, user_data);
     95 
     96 			if (BCM_FAILURE(r_rv)) {
     97 				break;
     98 			}
     99 		}
    100 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    101 	}
    102 
    103 	return r_rv;
    104 }
    105 
    106 int
    107 bcm_client_cosq_gport_traverse_by_port(
    108 	int	unit,
    109 	bcm_gport_t	port,
    110 	bcm_cosq_gport_traverse_cb	cb,
    111 	void *	user_data)
    112 {
    113 	bcm_rlink_traverse_data_t	r_req;
    114 	int	r_rv;
    115 	uint32	r_key[] = {
    116 		0x3c49f0f4,0xc84b0c8c,0x666ee956,0xd8e60b14,0x1dfedb8f };
    117 	bcm_gport_t	r_port;
    118 	int	r_numq;
    119 	uint32	r_flags;
    120 	bcm_gport_t	r_gport;
    121 
    122 	sal_memset(&r_req, 0, sizeof(r_req));
    123 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    124 	if (BCM_SUCCESS(r_rv)) {
    125 		/* Pack request */
    126 		/* Skip unit */
    127 		BCM_PACK_U32(r_req.tx_ptr, port);
    128 
    129 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    130 			/* Unpack reply */
    131 			/* Skip unit */
    132 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
    133 			BCM_UNPACK_U32(r_req.rx_ptr, r_numq);
    134 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
    135 			BCM_UNPACK_U32(r_req.rx_ptr, r_gport);
    136 
    137 			r_rv = cb(unit, r_port, r_numq, r_flags, r_gport, user_data);
    138 
    139 			if (BCM_FAILURE(r_rv)) {
    140 				break;
    141 			}
    142 		}
    143 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    144 	}
    145 
    146 	return r_rv;
    147 }
    148 
    149 int
    150 bcm_client_cosq_pfc_deadlock_recovery_event_register(
    151 	int	unit,
    152 	bcm_cosq_pfc_deadlock_recovery_event_cb_t	callback,
    153 	void *	userdata)
    154 {
    155 	bcm_rlink_traverse_data_t	r_req;
    156 	int	r_rv;
    157 	uint32	r_key[] = {
    158 		0x0a03a8c6,0x354d3590,0xb61e4c9d,0x23e091c7,0xcc467be9 };
    159 	bcm_port_t	r_port;
    160 	bcm_cos_queue_t	r_cosq;
    161 	bcm_cosq_pfc_deadlock_recovery_event_t	r_recovery_state;
    162 
    163 	sal_memset(&r_req, 0, sizeof(r_req));
    164 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    165 	if (BCM_SUCCESS(r_rv)) {
    166 		/* Pack request */
    167 		/* Skip unit */
    168 
    169 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    170 			/* Unpack reply */
    171 			/* Skip unit */
    172 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
    173 			BCM_UNPACK_U32(r_req.rx_ptr, r_cosq);
    174 			BCM_UNPACK_U32(r_req.rx_ptr, r_recovery_state);
    175 
    176 			r_rv = callback(unit, r_port, r_cosq, r_recovery_state, userdata);
    177 
    178 			if (BCM_FAILURE(r_rv)) {
    179 				break;
    180 			}
    181 		}
    182 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    183 	}
    184 
    185 	return r_rv;
    186 }
    187 
    188 int
    189 bcm_client_cosq_pfc_deadlock_recovery_event_unregister(
    190 	int	unit,
    191 	bcm_cosq_pfc_deadlock_recovery_event_cb_t	callback,
    192 	void *	userdata)
    193 {
    194 	bcm_rlink_traverse_data_t	r_req;
    195 	int	r_rv;
    196 	uint32	r_key[] = {
    197 		0x1639fee7,0x7ab663d0,0xaf8a309b,0xbf754839,0xb474ecaf };
    198 	bcm_port_t	r_port;
    199 	bcm_cos_queue_t	r_cosq;
    200 	bcm_cosq_pfc_deadlock_recovery_event_t	r_recovery_state;
    201 
    202 	sal_memset(&r_req, 0, sizeof(r_req));
    203 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    204 	if (BCM_SUCCESS(r_rv)) {
    205 		/* Pack request */
    206 		/* Skip unit */
    207 
    208 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    209 			/* Unpack reply */
    210 			/* Skip unit */
    211 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
    212 			BCM_UNPACK_U32(r_req.rx_ptr, r_cosq);
    213 			BCM_UNPACK_U32(r_req.rx_ptr, r_recovery_state);
    214 
    215 			r_rv = callback(unit, r_port, r_cosq, r_recovery_state, userdata);
    216 
    217 			if (BCM_FAILURE(r_rv)) {
    218 				break;
    219 			}
    220 		}
    221 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    222 	}
    223 
    224 	return r_rv;
    225 }
    226 
    227 int
    228 bcm_client_cosq_subscriber_traverse(
    229 	int	unit,
    230 	bcm_cosq_subscriber_map_traverse_cb	cb,
    231 	void *	user_data)
    232 {
    233 	bcm_rlink_traverse_data_t	r_req;
    234 	int	r_rv;
    235 	uint32	r_key[] = {
    236 		0x7eaa044b,0x4739ff12,0x82703193,0x8bc6a763,0x26eb7aae };
    237 	bcm_cosq_subscriber_map_t	r_map;
    238 	bcm_cosq_subscriber_map_t *	r_p_map;
    239 
    240 	sal_memset(&r_req, 0, sizeof(r_req));
    241 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    242 	if (BCM_SUCCESS(r_rv)) {
    243 		/* Pack request */
    244 		/* Skip unit */
    245 
    246 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    247 			/* Unpack reply */
    248 			/* Skip unit */
    249 			if (*r_req.rx_ptr++ == 1) {
    250 				r_p_map = NULL;
    251 			} else {
    252 				r_p_map = &r_map;
    253 				r_req.rx_ptr = _bcm_unpack_cosq_subscriber_map(r_req.rx_ptr, r_p_map);
    254 			}
    255 
    256 			r_rv = cb(unit, r_p_map, user_data);
    257 
    258 			if (BCM_FAILURE(r_rv)) {
    259 				break;
    260 			}
    261 		}
    262 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    263 	}
    264 
    265 	return r_rv;
    266 }
    267 
    268 int
    269 bcm_client_cosq_tas_profile_traverse(
    270 	int	unit,
    271 	bcm_gport_t	port,
    272 	bcm_cosq_tas_profile_traverse_cb	cb,
    273 	void *	user_data)
    274 {
    275 	bcm_rlink_traverse_data_t	r_req;
    276 	int	r_rv;
    277 	uint32	r_key[] = {
    278 		0x200a12ad,0xfb7ad646,0x7aa9921e,0x58a58191,0xd601c631 };
    279 	bcm_gport_t	r_port;
    280 	bcm_cosq_tas_profile_id_t	r_pid;
    281 
    282 	sal_memset(&r_req, 0, sizeof(r_req));
    283 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    284 	if (BCM_SUCCESS(r_rv)) {
    285 		/* Pack request */
    286 		/* Skip unit */
    287 		BCM_PACK_U32(r_req.tx_ptr, port);
    288 
    289 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    290 			/* Unpack reply */
    291 			/* Skip unit */
    292 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
    293 			BCM_UNPACK_U32(r_req.rx_ptr, r_pid);
    294 
    295 			r_rv = cb(unit, r_port, r_pid, user_data);
    296 
    297 			if (BCM_FAILURE(r_rv)) {
    298 				break;
    299 			}
    300 		}
    301 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    302 	}
    303 
    304 	return r_rv;
    305 }
    306 
    307 #ifdef	INCLUDE_L3
    308 
    309 int
    310 bcm_client_extender_encap_traverse(
    311 	int	unit,
    312 	bcm_extender_encap_traverse_cb	cb,
    313 	void *	user_data)
    314 {
    315 	bcm_rlink_traverse_data_t	r_req;
    316 	int	r_rv;
    317 	uint32	r_key[] = {
    318 		0xf016ce91,0xe1f3dfdd,0xcc2bf4a3,0x8d6c6965,0x051ef3b5 };
    319 	bcm_extender_encap_t	r_extender_encap;
    320 	bcm_extender_encap_t *	r_p_extender_encap;
    321 
    322 	sal_memset(&r_req, 0, sizeof(r_req));
    323 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    324 	if (BCM_SUCCESS(r_rv)) {
    325 		/* Pack request */
    326 		/* Skip unit */
    327 
    328 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    329 			/* Unpack reply */
    330 			/* Skip unit */
    331 			if (*r_req.rx_ptr++ == 1) {
    332 				r_p_extender_encap = NULL;
    333 			} else {
    334 				r_p_extender_encap = &r_extender_encap;
    335 				r_req.rx_ptr = _bcm_unpack_extender_encap(r_req.rx_ptr, r_p_extender_encap);
    336 			}
    337 
    338 			r_rv = cb(unit, r_p_extender_encap, user_data);
    339 
    340 			if (BCM_FAILURE(r_rv)) {
    341 				break;
    342 			}
    343 		}
    344 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    345 	}
    346 
    347 	return r_rv;
    348 }
    349 
    350 int
    351 bcm_client_extender_forward_traverse(
    352 	int	unit,
    353 	bcm_extender_forward_traverse_cb	cb,
    354 	void *	user_data)
    355 {
    356 	bcm_rlink_traverse_data_t	r_req;
    357 	int	r_rv;
    358 	uint32	r_key[] = {
    359 		0x3e5a5367,0xd7207b54,0x4aeac8c6,0x13cc01c5,0xb2b2c801 };
    360 	bcm_extender_forward_t	r_extender_forward_entry;
    361 	bcm_extender_forward_t *	r_p_extender_forward_entry;
    362 
    363 	sal_memset(&r_req, 0, sizeof(r_req));
    364 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    365 	if (BCM_SUCCESS(r_rv)) {
    366 		/* Pack request */
    367 		/* Skip unit */
    368 
    369 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    370 			/* Unpack reply */
    371 			/* Skip unit */
    372 			if (*r_req.rx_ptr++ == 1) {
    373 				r_p_extender_forward_entry = NULL;
    374 			} else {
    375 				r_p_extender_forward_entry = &r_extender_forward_entry;
    376 				r_req.rx_ptr = _bcm_unpack_extender_forward(r_req.rx_ptr, r_p_extender_forward_entry);
    377 			}
    378 
    379 			r_rv = cb(unit, r_p_extender_forward_entry, user_data);
    380 
    381 			if (BCM_FAILURE(r_rv)) {
    382 				break;
    383 			}
    384 		}
    385 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    386 	}
    387 
    388 	return r_rv;
    389 }
    390 
    391 int
    392 bcm_client_extender_port_traverse(
    393 	int	unit,
    394 	bcm_extender_port_traverse_cb	cb,
    395 	void *	user_data)
    396 {
    397 	bcm_rlink_traverse_data_t	r_req;
    398 	int	r_rv;
    399 	uint32	r_key[] = {
    400 		0x7e9ac770,0xd851ab92,0x9977eecf,0x07c509f4,0xe57e5cd0 };
    401 	bcm_extender_port_t	r_extender_port;
    402 	bcm_extender_port_t *	r_p_extender_port;
    403 
    404 	sal_memset(&r_req, 0, sizeof(r_req));
    405 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    406 	if (BCM_SUCCESS(r_rv)) {
    407 		/* Pack request */
    408 		/* Skip unit */
    409 
    410 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    411 			/* Unpack reply */
    412 			/* Skip unit */
    413 			if (*r_req.rx_ptr++ == 1) {
    414 				r_p_extender_port = NULL;
    415 			} else {
    416 				r_p_extender_port = &r_extender_port;
    417 				r_req.rx_ptr = _bcm_unpack_extender_port(r_req.rx_ptr, r_p_extender_port);
    418 			}
    419 
    420 			r_rv = cb(unit, r_p_extender_port, user_data);
    421 
    422 			if (BCM_FAILURE(r_rv)) {
    423 				break;
    424 			}
    425 		}
    426 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    427 	}
    428 
    429 	return r_rv;
    430 }
    431 
    432 #endif	/* INCLUDE_L3 */
    433 
    434 int
    435 bcm_client_fabric_action_traverse(
    436 	int	unit,
    437 	bcm_fabric_action_traverse_cb	cb,
    438 	void *	user_data)
    439 {
    440 	bcm_rlink_traverse_data_t	r_req;
    441 	int	r_rv;
    442 	uint32	r_key[] = {
    443 		0xd09547e4,0x74756cf0,0x892ce5f5,0x73a3ea6c,0xff536521 };
    444 	bcm_fabric_action_t	r_action_id;
    445 	bcm_fabric_action_info_t	r_action_info;
    446 	bcm_fabric_action_info_t *	r_p_action_info;
    447 
    448 	sal_memset(&r_req, 0, sizeof(r_req));
    449 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    450 	if (BCM_SUCCESS(r_rv)) {
    451 		/* Pack request */
    452 		/* Skip unit */
    453 
    454 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    455 			/* Unpack reply */
    456 			/* Skip unit */
    457 			BCM_UNPACK_U32(r_req.rx_ptr, r_action_id);
    458 			if (*r_req.rx_ptr++ == 1) {
    459 				r_p_action_info = NULL;
    460 			} else {
    461 				r_p_action_info = &r_action_info;
    462 				r_req.rx_ptr = _bcm_unpack_fabric_action_info(r_req.rx_ptr, r_p_action_info);
    463 			}
    464 
    465 			r_rv = cb(unit, r_action_id, r_p_action_info, user_data);
    466 
    467 			if (BCM_FAILURE(r_rv)) {
    468 				break;
    469 			}
    470 		}
    471 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    472 	}
    473 
    474 	return r_rv;
    475 }
    476 
    477 int
    478 bcm_client_fabric_predicate_action_traverse(
    479 	int	unit,
    480 	bcm_fabric_predicate_action_traverse_cb	cb,
    481 	void *	user_data)
    482 {
    483 	bcm_rlink_traverse_data_t	r_req;
    484 	int	r_rv;
    485 	uint32	r_key[] = {
    486 		0xe3e74fd8,0x96476661,0x8047f5a8,0x117c2bbf,0xeabeaf58 };
    487 	bcm_fabric_predicate_action_t	r_predicate_action_id;
    488 	bcm_fabric_predicate_action_info_t	r_predicate_action_info;
    489 	bcm_fabric_predicate_action_info_t *	r_p_predicate_action_info;
    490 
    491 	sal_memset(&r_req, 0, sizeof(r_req));
    492 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    493 	if (BCM_SUCCESS(r_rv)) {
    494 		/* Pack request */
    495 		/* Skip unit */
    496 
    497 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    498 			/* Unpack reply */
    499 			/* Skip unit */
    500 			BCM_UNPACK_U32(r_req.rx_ptr, r_predicate_action_id);
    501 			if (*r_req.rx_ptr++ == 1) {
    502 				r_p_predicate_action_info = NULL;
    503 			} else {
    504 				r_p_predicate_action_info = &r_predicate_action_info;
    505 				r_req.rx_ptr = _bcm_unpack_fabric_predicate_action_info(r_req.rx_ptr, r_p_predicate_action_info);
    506 			}
    507 
    508 			r_rv = cb(unit, r_predicate_action_id, r_p_predicate_action_info, user_data);
    509 
    510 			if (BCM_FAILURE(r_rv)) {
    511 				break;
    512 			}
    513 		}
    514 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    515 	}
    516 
    517 	return r_rv;
    518 }
    519 
    520 int
    521 bcm_client_fabric_predicate_traverse(
    522 	int	unit,
    523 	bcm_fabric_predicate_traverse_cb	cb,
    524 	void *	user_data)
    525 {
    526 	bcm_rlink_traverse_data_t	r_req;
    527 	int	r_rv;
    528 	uint32	r_key[] = {
    529 		0x9b5315c0,0xb0c3eeb2,0x69dcd64b,0x615311d9,0x84425616 };
    530 	bcm_fabric_predicate_t	r_pred_id;
    531 	bcm_fabric_predicate_info_t	r_pred_info;
    532 	bcm_fabric_predicate_info_t *	r_p_pred_info;
    533 
    534 	sal_memset(&r_req, 0, sizeof(r_req));
    535 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    536 	if (BCM_SUCCESS(r_rv)) {
    537 		/* Pack request */
    538 		/* Skip unit */
    539 
    540 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    541 			/* Unpack reply */
    542 			/* Skip unit */
    543 			BCM_UNPACK_U32(r_req.rx_ptr, r_pred_id);
    544 			if (*r_req.rx_ptr++ == 1) {
    545 				r_p_pred_info = NULL;
    546 			} else {
    547 				r_p_pred_info = &r_pred_info;
    548 				r_req.rx_ptr = _bcm_unpack_fabric_predicate_info(r_req.rx_ptr, r_p_pred_info);
    549 			}
    550 
    551 			r_rv = cb(unit, r_pred_id, r_p_pred_info, user_data);
    552 
    553 			if (BCM_FAILURE(r_rv)) {
    554 				break;
    555 			}
    556 		}
    557 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    558 	}
    559 
    560 	return r_rv;
    561 }
    562 
    563 int
    564 bcm_client_fabric_qsel_entry_traverse(
    565 	int	unit,
    566 	bcm_fabric_qsel_t	qsel_id,
    567 	bcm_fabric_qsel_entry_traverse_cb	cb,
    568 	void *	user_data)
    569 {
    570 	bcm_rlink_traverse_data_t	r_req;
    571 	int	r_rv;
    572 	uint32	r_key[] = {
    573 		0x295c9feb,0x8c75e357,0x8c42628e,0x49db7cf4,0x39540b43 };
    574 	bcm_fabric_qsel_t	r_qsel_id;
    575 	int	r_offset;
    576 	bcm_gport_t	r_queue;
    577 	bcm_fabric_qsel_offset_t	r_qsel_offset;
    578 
    579 	sal_memset(&r_req, 0, sizeof(r_req));
    580 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    581 	if (BCM_SUCCESS(r_rv)) {
    582 		/* Pack request */
    583 		/* Skip unit */
    584 		BCM_PACK_U32(r_req.tx_ptr, qsel_id);
    585 
    586 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    587 			/* Unpack reply */
    588 			/* Skip unit */
    589 			BCM_UNPACK_U32(r_req.rx_ptr, r_qsel_id);
    590 			BCM_UNPACK_U32(r_req.rx_ptr, r_offset);
    591 			BCM_UNPACK_U32(r_req.rx_ptr, r_queue);
    592 			BCM_UNPACK_U32(r_req.rx_ptr, r_qsel_offset);
    593 
    594 			r_rv = cb(unit, r_qsel_id, r_offset, r_queue, r_qsel_offset, user_data);
    595 
    596 			if (BCM_FAILURE(r_rv)) {
    597 				break;
    598 			}
    599 		}
    600 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    601 	}
    602 
    603 	return r_rv;
    604 }
    605 
    606 int
    607 bcm_client_fabric_qsel_offset_entry_traverse(
    608 	int	unit,
    609 	bcm_fabric_qsel_offset_t	qsel_offset_id,
    610 	bcm_fabric_qsel_offset_entry_traverse_cb	cb,
    611 	void *	user_data)
    612 {
    613 	bcm_rlink_traverse_data_t	r_req;
    614 	int	r_rv;
    615 	uint32	r_key[] = {
    616 		0xb00d7a12,0xfbe0dca1,0x4a6e8f4d,0xa249d050,0x792767aa };
    617 	bcm_fabric_qsel_offset_t	r_qsel_offset_id;
    618 	bcm_cos_t	r_int_pri;
    619 	int	r_offset;
    620 
    621 	sal_memset(&r_req, 0, sizeof(r_req));
    622 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    623 	if (BCM_SUCCESS(r_rv)) {
    624 		/* Pack request */
    625 		/* Skip unit */
    626 		BCM_PACK_U32(r_req.tx_ptr, qsel_offset_id);
    627 
    628 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    629 			/* Unpack reply */
    630 			/* Skip unit */
    631 			BCM_UNPACK_U32(r_req.rx_ptr, r_qsel_offset_id);
    632 			BCM_UNPACK_U32(r_req.rx_ptr, r_int_pri);
    633 			BCM_UNPACK_U32(r_req.rx_ptr, r_offset);
    634 
    635 			r_rv = cb(unit, r_qsel_offset_id, r_int_pri, r_offset, user_data);
    636 
    637 			if (BCM_FAILURE(r_rv)) {
    638 				break;
    639 			}
    640 		}
    641 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    642 	}
    643 
    644 	return r_rv;
    645 }
    646 
    647 int
    648 bcm_client_fabric_qsel_offset_traverse(
    649 	int	unit,
    650 	bcm_fabric_qsel_offset_traverse_cb	cb,
    651 	void *	user_data)
    652 {
    653 	bcm_rlink_traverse_data_t	r_req;
    654 	int	r_rv;
    655 	uint32	r_key[] = {
    656 		0x23b0dc69,0x3a9bee91,0x30cb05d4,0x7dc2246d,0x09b7ad84 };
    657 	bcm_fabric_qsel_offset_t	r_qsel_offset_id;
    658 	uint32	r_flags;
    659 
    660 	sal_memset(&r_req, 0, sizeof(r_req));
    661 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    662 	if (BCM_SUCCESS(r_rv)) {
    663 		/* Pack request */
    664 		/* Skip unit */
    665 
    666 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    667 			/* Unpack reply */
    668 			/* Skip unit */
    669 			BCM_UNPACK_U32(r_req.rx_ptr, r_qsel_offset_id);
    670 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
    671 
    672 			r_rv = cb(unit, r_qsel_offset_id, r_flags, user_data);
    673 
    674 			if (BCM_FAILURE(r_rv)) {
    675 				break;
    676 			}
    677 		}
    678 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    679 	}
    680 
    681 	return r_rv;
    682 }
    683 
    684 int
    685 bcm_client_fabric_qsel_traverse(
    686 	int	unit,
    687 	bcm_fabric_qsel_traverse_cb	cb,
    688 	void *	user_data)
    689 {
    690 	bcm_rlink_traverse_data_t	r_req;
    691 	int	r_rv;
    692 	uint32	r_key[] = {
    693 		0x2428b5d0,0x909f54aa,0xf64a8cee,0x9b352323,0x7e3273ef };
    694 	bcm_fabric_qsel_t	r_qsel_id;
    695 	uint32	r_flags;
    696 	int	r_base;
    697 	int	r_count;
    698 
    699 	sal_memset(&r_req, 0, sizeof(r_req));
    700 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    701 	if (BCM_SUCCESS(r_rv)) {
    702 		/* Pack request */
    703 		/* Skip unit */
    704 
    705 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    706 			/* Unpack reply */
    707 			/* Skip unit */
    708 			BCM_UNPACK_U32(r_req.rx_ptr, r_qsel_id);
    709 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
    710 			BCM_UNPACK_U32(r_req.rx_ptr, r_base);
    711 			BCM_UNPACK_U32(r_req.rx_ptr, r_count);
    712 
    713 			r_rv = cb(unit, r_qsel_id, r_flags, r_base, r_count, user_data);
    714 
    715 			if (BCM_FAILURE(r_rv)) {
    716 				break;
    717 			}
    718 		}
    719 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    720 	}
    721 
    722 	return r_rv;
    723 }
    724 
    725 int
    726 bcm_client_fcoe_route_traverse(
    727 	int	unit,
    728 	uint32	flags,
    729 	bcm_fcoe_route_traverse_cb	trav_fn,
    730 	void *	user_data)
    731 {
    732 	bcm_rlink_traverse_data_t	r_req;
    733 	int	r_rv;
    734 	uint32	r_key[] = {
    735 		0x11f430d4,0x77be922f,0xe6ae6c0c,0x93c6aad5,0xbe032cc2 };
    736 	bcm_fcoe_route_t	r_route;
    737 	bcm_fcoe_route_t *	r_p_route;
    738 
    739 	sal_memset(&r_req, 0, sizeof(r_req));
    740 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    741 	if (BCM_SUCCESS(r_rv)) {
    742 		/* Pack request */
    743 		/* Skip unit */
    744 		BCM_PACK_U32(r_req.tx_ptr, flags);
    745 
    746 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    747 			/* Unpack reply */
    748 			/* Skip unit */
    749 			if (*r_req.rx_ptr++ == 1) {
    750 				r_p_route = NULL;
    751 			} else {
    752 				r_p_route = &r_route;
    753 				r_req.rx_ptr = _bcm_unpack_fcoe_route(r_req.rx_ptr, r_p_route);
    754 			}
    755 
    756 			r_rv = trav_fn(unit, r_p_route, user_data);
    757 
    758 			if (BCM_FAILURE(r_rv)) {
    759 				break;
    760 			}
    761 		}
    762 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    763 	}
    764 
    765 	return r_rv;
    766 }
    767 
    768 int
    769 bcm_client_fcoe_vsan_traverse(
    770 	int	unit,
    771 	uint32	flags,
    772 	bcm_fcoe_vsan_traverse_cb	trav_fn,
    773 	void *	user_data)
    774 {
    775 	bcm_rlink_traverse_data_t	r_req;
    776 	int	r_rv;
    777 	uint32	r_key[] = {
    778 		0x1d2f1ea4,0xe2d4a29a,0x5e48b834,0xf3e30cd0,0xe11a1ff4 };
    779 	bcm_fcoe_vsan_id_t	r_vsan_id;
    780 	bcm_fcoe_vsan_t	r_vsan;
    781 	bcm_fcoe_vsan_t *	r_p_vsan;
    782 
    783 	sal_memset(&r_req, 0, sizeof(r_req));
    784 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    785 	if (BCM_SUCCESS(r_rv)) {
    786 		/* Pack request */
    787 		/* Skip unit */
    788 		BCM_PACK_U32(r_req.tx_ptr, flags);
    789 
    790 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    791 			/* Unpack reply */
    792 			/* Skip unit */
    793 			BCM_UNPACK_U32(r_req.rx_ptr, r_vsan_id);
    794 			if (*r_req.rx_ptr++ == 1) {
    795 				r_p_vsan = NULL;
    796 			} else {
    797 				r_p_vsan = &r_vsan;
    798 				r_req.rx_ptr = _bcm_unpack_fcoe_vsan(r_req.rx_ptr, r_p_vsan);
    799 			}
    800 
    801 			r_rv = trav_fn(unit, r_vsan_id, r_p_vsan, user_data);
    802 
    803 			if (BCM_FAILURE(r_rv)) {
    804 				break;
    805 			}
    806 		}
    807 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    808 	}
    809 
    810 	return r_rv;
    811 }
    812 
    813 int
    814 bcm_client_fcoe_zone_traverse(
    815 	int	unit,
    816 	uint32	flags,
    817 	bcm_fcoe_zone_traverse_cb	trav_fn,
    818 	void *	user_data)
    819 {
    820 	bcm_rlink_traverse_data_t	r_req;
    821 	int	r_rv;
    822 	uint32	r_key[] = {
    823 		0x3fde7d72,0x13dca9fb,0x26a6e5f6,0x808ef4a4,0x0b11388b };
    824 	bcm_fcoe_zone_entry_t	r_zone;
    825 	bcm_fcoe_zone_entry_t *	r_p_zone;
    826 
    827 	sal_memset(&r_req, 0, sizeof(r_req));
    828 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    829 	if (BCM_SUCCESS(r_rv)) {
    830 		/* Pack request */
    831 		/* Skip unit */
    832 		BCM_PACK_U32(r_req.tx_ptr, flags);
    833 
    834 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    835 			/* Unpack reply */
    836 			/* Skip unit */
    837 			if (*r_req.rx_ptr++ == 1) {
    838 				r_p_zone = NULL;
    839 			} else {
    840 				r_p_zone = &r_zone;
    841 				r_req.rx_ptr = _bcm_unpack_fcoe_zone_entry(r_req.rx_ptr, r_p_zone);
    842 			}
    843 
    844 			r_rv = trav_fn(unit, r_p_zone, user_data);
    845 
    846 			if (BCM_FAILURE(r_rv)) {
    847 				break;
    848 			}
    849 		}
    850 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    851 	}
    852 
    853 	return r_rv;
    854 }
    855 
    856 int
    857 bcm_client_field_group_traverse(
    858 	int	unit,
    859 	bcm_field_group_traverse_cb	callback,
    860 	void *	user_data)
    861 {
    862 	bcm_rlink_traverse_data_t	r_req;
    863 	int	r_rv;
    864 	uint32	r_key[] = {
    865 		0xabd27cfb,0x948c6a65,0x086d4a58,0x4f1490e8,0x6e2aa45d };
    866 	bcm_field_group_t	r_group;
    867 
    868 	sal_memset(&r_req, 0, sizeof(r_req));
    869 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    870 	if (BCM_SUCCESS(r_rv)) {
    871 		/* Pack request */
    872 		/* Skip unit */
    873 
    874 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    875 			/* Unpack reply */
    876 			/* Skip unit */
    877 			BCM_UNPACK_U32(r_req.rx_ptr, r_group);
    878 
    879 			r_rv = callback(unit, r_group, user_data);
    880 
    881 			if (BCM_FAILURE(r_rv)) {
    882 				break;
    883 			}
    884 		}
    885 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    886 	}
    887 
    888 	return r_rv;
    889 }
    890 
    891 #ifdef	INCLUDE_L3
    892 
    893 int
    894 bcm_client_flow_encap_traverse(
    895 	int	unit,
    896 	bcm_flow_encap_traverse_cb	cb,
    897 	void *	user_data)
    898 {
    899 	bcm_rlink_traverse_data_t	r_req;
    900 	int	r_rv;
    901 	int	r_i;
    902 	uint32	r_key[] = {
    903 		0x6592817f,0x1f32e355,0x63c422f7,0x858785d7,0x09be07db };
    904 	bcm_flow_encap_config_t	r_info;
    905 	uint32	r_num_of_fields;
    906 	bcm_flow_encap_config_t *	r_p_info;
    907 	bcm_flow_logical_field_t *	r_p_field;
    908 
    909 	sal_memset(&r_req, 0, sizeof(r_req));
    910 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    911 	if (BCM_SUCCESS(r_rv)) {
    912 		/* Pack request */
    913 		/* Skip unit */
    914 
    915 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    916 			/* Unpack reply */
    917 			r_rv = BCM_E_NONE;
    918 			/* Skip unit */
    919 			if (*r_req.rx_ptr++ == 1) {
    920 				r_p_info = NULL;
    921 			} else {
    922 				r_p_info = &r_info;
    923 				r_req.rx_ptr = _bcm_unpack_flow_encap_config(r_req.rx_ptr, r_p_info);
    924 			}
    925 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_of_fields);
    926 			if (*r_req.rx_ptr++ == 1) {
    927 				r_p_field = NULL;
    928 			} else {
    929 				r_p_field = sal_alloc(r_num_of_fields*sizeof(bcm_flow_logical_field_t), "traverse r_field");
    930 				if (r_p_field == NULL) {
    931 					r_rv = BCM_E_MEMORY;
    932 				} else {
    933 					for (r_i = 0; r_i < r_num_of_fields; r_i++) {
    934 						r_req.rx_ptr = _bcm_unpack_flow_logical_field(r_req.rx_ptr, r_p_field+r_i);
    935 					}
    936 				}
    937 			}
    938 
    939 			if (BCM_SUCCESS(r_rv)) {
    940 				r_rv = cb(unit, r_p_info, r_num_of_fields, r_p_field, user_data);
    941 			}
    942 
    943 			if (r_p_field != NULL) {
    944 				sal_free(r_p_field);
    945 			}
    946 
    947 			if (BCM_FAILURE(r_rv)) {
    948 				break;
    949 			}
    950 		}
    951 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
    952 	}
    953 
    954 	return r_rv;
    955 }
    956 
    957 int
    958 bcm_client_flow_match_traverse(
    959 	int	unit,
    960 	bcm_flow_match_traverse_cb	cb,
    961 	void *	user_data)
    962 {
    963 	bcm_rlink_traverse_data_t	r_req;
    964 	int	r_rv;
    965 	int	r_i;
    966 	uint32	r_key[] = {
    967 		0x81ba6960,0x4e9f9b8c,0x175b3bce,0x258ff077,0x15cd6d66 };
    968 	bcm_flow_match_config_t	r_info;
    969 	uint32	r_num_of_fields;
    970 	bcm_flow_match_config_t *	r_p_info;
    971 	bcm_flow_logical_field_t *	r_p_field;
    972 
    973 	sal_memset(&r_req, 0, sizeof(r_req));
    974 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
    975 	if (BCM_SUCCESS(r_rv)) {
    976 		/* Pack request */
    977 		/* Skip unit */
    978 
    979 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
    980 			/* Unpack reply */
    981 			r_rv = BCM_E_NONE;
    982 			/* Skip unit */
    983 			if (*r_req.rx_ptr++ == 1) {
    984 				r_p_info = NULL;
    985 			} else {
    986 				r_p_info = &r_info;
    987 				r_req.rx_ptr = _bcm_unpack_flow_match_config(r_req.rx_ptr, r_p_info);
    988 			}
    989 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_of_fields);
    990 			if (*r_req.rx_ptr++ == 1) {
    991 				r_p_field = NULL;
    992 			} else {
    993 				r_p_field = sal_alloc(r_num_of_fields*sizeof(bcm_flow_logical_field_t), "traverse r_field");
    994 				if (r_p_field == NULL) {
    995 					r_rv = BCM_E_MEMORY;
    996 				} else {
    997 					for (r_i = 0; r_i < r_num_of_fields; r_i++) {
    998 						r_req.rx_ptr = _bcm_unpack_flow_logical_field(r_req.rx_ptr, r_p_field+r_i);
    999 					}
   1000 				}
   1001 			}
   1002 
   1003 			if (BCM_SUCCESS(r_rv)) {
   1004 				r_rv = cb(unit, r_p_info, r_num_of_fields, r_p_field, user_data);
   1005 			}
   1006 
   1007 			if (r_p_field != NULL) {
   1008 				sal_free(r_p_field);
   1009 			}
   1010 
   1011 			if (BCM_FAILURE(r_rv)) {
   1012 				break;
   1013 			}
   1014 		}
   1015 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1016 	}
   1017 
   1018 	return r_rv;
   1019 }
   1020 
   1021 int
   1022 bcm_client_flow_tunnel_initiator_traverse(
   1023 	int	unit,
   1024 	bcm_flow_tunnel_initiator_traverse_cb	cb,
   1025 	void *	user_data)
   1026 {
   1027 	bcm_rlink_traverse_data_t	r_req;
   1028 	int	r_rv;
   1029 	int	r_i;
   1030 	uint32	r_key[] = {
   1031 		0x11322c75,0x2183e25c,0xb7faf1de,0xd2fce25e,0xc650a0b5 };
   1032 	bcm_flow_tunnel_initiator_t	r_info;
   1033 	uint32	r_num_of_fields;
   1034 	bcm_flow_tunnel_initiator_t *	r_p_info;
   1035 	bcm_flow_logical_field_t *	r_p_field;
   1036 
   1037 	sal_memset(&r_req, 0, sizeof(r_req));
   1038 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1039 	if (BCM_SUCCESS(r_rv)) {
   1040 		/* Pack request */
   1041 		/* Skip unit */
   1042 
   1043 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1044 			/* Unpack reply */
   1045 			r_rv = BCM_E_NONE;
   1046 			/* Skip unit */
   1047 			if (*r_req.rx_ptr++ == 1) {
   1048 				r_p_info = NULL;
   1049 			} else {
   1050 				r_p_info = &r_info;
   1051 				r_req.rx_ptr = _bcm_unpack_flow_tunnel_initiator(r_req.rx_ptr, r_p_info);
   1052 			}
   1053 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_of_fields);
   1054 			if (*r_req.rx_ptr++ == 1) {
   1055 				r_p_field = NULL;
   1056 			} else {
   1057 				r_p_field = sal_alloc(r_num_of_fields*sizeof(bcm_flow_logical_field_t), "traverse r_field");
   1058 				if (r_p_field == NULL) {
   1059 					r_rv = BCM_E_MEMORY;
   1060 				} else {
   1061 					for (r_i = 0; r_i < r_num_of_fields; r_i++) {
   1062 						r_req.rx_ptr = _bcm_unpack_flow_logical_field(r_req.rx_ptr, r_p_field+r_i);
   1063 					}
   1064 				}
   1065 			}
   1066 
   1067 			if (BCM_SUCCESS(r_rv)) {
   1068 				r_rv = cb(unit, r_p_info, r_num_of_fields, r_p_field, user_data);
   1069 			}
   1070 
   1071 			if (r_p_field != NULL) {
   1072 				sal_free(r_p_field);
   1073 			}
   1074 
   1075 			if (BCM_FAILURE(r_rv)) {
   1076 				break;
   1077 			}
   1078 		}
   1079 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1080 	}
   1081 
   1082 	return r_rv;
   1083 }
   1084 
   1085 int
   1086 bcm_client_flow_tunnel_terminator_traverse(
   1087 	int	unit,
   1088 	bcm_flow_tunnel_terminator_traverse_cb	cb,
   1089 	void *	user_data)
   1090 {
   1091 	bcm_rlink_traverse_data_t	r_req;
   1092 	int	r_rv;
   1093 	int	r_i;
   1094 	uint32	r_key[] = {
   1095 		0xde6fc490,0xd1e7d3b8,0xe1d03dce,0x19d24374,0x3045a319 };
   1096 	bcm_flow_tunnel_terminator_t	r_info;
   1097 	uint32	r_num_of_fields;
   1098 	bcm_flow_tunnel_terminator_t *	r_p_info;
   1099 	bcm_flow_logical_field_t *	r_p_field;
   1100 
   1101 	sal_memset(&r_req, 0, sizeof(r_req));
   1102 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1103 	if (BCM_SUCCESS(r_rv)) {
   1104 		/* Pack request */
   1105 		/* Skip unit */
   1106 
   1107 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1108 			/* Unpack reply */
   1109 			r_rv = BCM_E_NONE;
   1110 			/* Skip unit */
   1111 			if (*r_req.rx_ptr++ == 1) {
   1112 				r_p_info = NULL;
   1113 			} else {
   1114 				r_p_info = &r_info;
   1115 				r_req.rx_ptr = _bcm_unpack_flow_tunnel_terminator(r_req.rx_ptr, r_p_info);
   1116 			}
   1117 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_of_fields);
   1118 			if (*r_req.rx_ptr++ == 1) {
   1119 				r_p_field = NULL;
   1120 			} else {
   1121 				r_p_field = sal_alloc(r_num_of_fields*sizeof(bcm_flow_logical_field_t), "traverse r_field");
   1122 				if (r_p_field == NULL) {
   1123 					r_rv = BCM_E_MEMORY;
   1124 				} else {
   1125 					for (r_i = 0; r_i < r_num_of_fields; r_i++) {
   1126 						r_req.rx_ptr = _bcm_unpack_flow_logical_field(r_req.rx_ptr, r_p_field+r_i);
   1127 					}
   1128 				}
   1129 			}
   1130 
   1131 			if (BCM_SUCCESS(r_rv)) {
   1132 				r_rv = cb(unit, r_p_info, r_num_of_fields, r_p_field, user_data);
   1133 			}
   1134 
   1135 			if (r_p_field != NULL) {
   1136 				sal_free(r_p_field);
   1137 			}
   1138 
   1139 			if (BCM_FAILURE(r_rv)) {
   1140 				break;
   1141 			}
   1142 		}
   1143 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1144 	}
   1145 
   1146 	return r_rv;
   1147 }
   1148 
   1149 int
   1150 bcm_client_flow_vpn_traverse(
   1151 	int	unit,
   1152 	bcm_flow_vpn_traverse_cb	cb,
   1153 	void *	user_data)
   1154 {
   1155 	bcm_rlink_traverse_data_t	r_req;
   1156 	int	r_rv;
   1157 	uint32	r_key[] = {
   1158 		0xb1216e1d,0x9b30098f,0x773c692c,0x54c6ede0,0x51e7deff };
   1159 	bcm_vpn_t	r_vpn;
   1160 	bcm_flow_vpn_config_t	r_info;
   1161 	bcm_flow_vpn_config_t *	r_p_info;
   1162 
   1163 	sal_memset(&r_req, 0, sizeof(r_req));
   1164 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1165 	if (BCM_SUCCESS(r_rv)) {
   1166 		/* Pack request */
   1167 		/* Skip unit */
   1168 
   1169 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1170 			/* Unpack reply */
   1171 			/* Skip unit */
   1172 			BCM_UNPACK_U16(r_req.rx_ptr, r_vpn);
   1173 			if (*r_req.rx_ptr++ == 1) {
   1174 				r_p_info = NULL;
   1175 			} else {
   1176 				r_p_info = &r_info;
   1177 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->flags);
   1178 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->broadcast_group);
   1179 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->unknown_unicast_group);
   1180 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->unknown_multicast_group);
   1181 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.mmrp_action);
   1182 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.srp_action);
   1183 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.arp_reply_action);
   1184 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.arp_request_action);
   1185 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.nd_action);
   1186 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.dhcp_action);
   1187 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.igmp_report_leave_action);
   1188 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.igmp_query_action);
   1189 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.igmp_unknown_msg_action);
   1190 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.mld_report_done_action);
   1191 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.mld_query_action);
   1192 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.ip4_rsvd_mc_action);
   1193 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.ip6_rsvd_mc_action);
   1194 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.ip4_mc_router_adv_action);
   1195 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.ip6_mc_router_adv_action);
   1196 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->protocol_pkt.flood_action_according_to_pfm);
   1197 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_info->match_port_class);
   1198 			}
   1199 
   1200 			r_rv = cb(unit, r_vpn, r_p_info, user_data);
   1201 
   1202 			if (BCM_FAILURE(r_rv)) {
   1203 				break;
   1204 			}
   1205 		}
   1206 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1207 	}
   1208 
   1209 	return r_rv;
   1210 }
   1211 
   1212 #endif	/* INCLUDE_L3 */
   1213 
   1214 int
   1215 bcm_client_flowtracker_check_traverse(
   1216 	int	unit,
   1217 	bcm_flowtracker_check_traverse_cb	cb,
   1218 	void *	user_data)
   1219 {
   1220 	bcm_rlink_traverse_data_t	r_req;
   1221 	int	r_rv;
   1222 	uint32	r_key[] = {
   1223 		0x80c0e350,0x5cd52793,0x173df485,0x1605f02d,0x0fdbd644 };
   1224 	bcm_flowtracker_check_t	r_check_id;
   1225 	bcm_flowtracker_check_info_t	r_check_info;
   1226 	bcm_flowtracker_check_info_t *	r_p_check_info;
   1227 
   1228 	sal_memset(&r_req, 0, sizeof(r_req));
   1229 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1230 	if (BCM_SUCCESS(r_rv)) {
   1231 		/* Pack request */
   1232 		/* Skip unit */
   1233 
   1234 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1235 			/* Unpack reply */
   1236 			/* Skip unit */
   1237 			BCM_UNPACK_U32(r_req.rx_ptr, r_check_id);
   1238 			if (*r_req.rx_ptr++ == 1) {
   1239 				r_p_check_info = NULL;
   1240 			} else {
   1241 				r_p_check_info = &r_check_info;
   1242 				r_req.rx_ptr = _bcm_unpack_flowtracker_check_info(r_req.rx_ptr, r_p_check_info);
   1243 			}
   1244 
   1245 			r_rv = cb(unit, r_check_id, r_p_check_info, user_data);
   1246 
   1247 			if (BCM_FAILURE(r_rv)) {
   1248 				break;
   1249 			}
   1250 		}
   1251 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1252 	}
   1253 
   1254 	return r_rv;
   1255 }
   1256 
   1257 int
   1258 bcm_client_hash_flex_bin_traverse(
   1259 	int	unit,
   1260 	uint32	option,
   1261 	bcm_hash_flex_bin_traverse_cb	cb,
   1262 	void *	user_data)
   1263 {
   1264 	bcm_rlink_traverse_data_t	r_req;
   1265 	int	r_rv;
   1266 	int	r_i;
   1267 	uint32	r_key[] = {
   1268 		0xd01b170f,0x66e58955,0x4064f80a,0x826a4128,0xf782776c };
   1269 	bcm_hash_flex_bin_config_t	r_cfg;
   1270 	int	r_num_bins;
   1271 	int	r_num_fields;
   1272 	bcm_hash_flex_bin_config_t *	r_p_cfg;
   1273 	bcm_hash_flex_bin_cmd_t *	r_p_bin_cmd;
   1274 	bcm_hash_flex_field_t *	r_p_flex_field;
   1275 
   1276 	sal_memset(&r_req, 0, sizeof(r_req));
   1277 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1278 	if (BCM_SUCCESS(r_rv)) {
   1279 		/* Pack request */
   1280 		/* Skip unit */
   1281 		BCM_PACK_U32(r_req.tx_ptr, option);
   1282 
   1283 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1284 			/* Unpack reply */
   1285 			r_rv = BCM_E_NONE;
   1286 			/* Skip unit */
   1287 			if (*r_req.rx_ptr++ == 1) {
   1288 				r_p_cfg = NULL;
   1289 			} else {
   1290 				r_p_cfg = &r_cfg;
   1291 				r_req.rx_ptr = _bcm_unpack_hash_flex_bin_config(r_req.rx_ptr, r_p_cfg);
   1292 			}
   1293 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_bins);
   1294 			if (*r_req.rx_ptr++ == 1) {
   1295 				r_p_bin_cmd = NULL;
   1296 			} else {
   1297 				r_p_bin_cmd = sal_alloc(r_num_bins*sizeof(bcm_hash_flex_bin_cmd_t), "traverse r_bin_cmd");
   1298 				if (r_p_bin_cmd == NULL) {
   1299 					r_rv = BCM_E_MEMORY;
   1300 				} else {
   1301 					for (r_i = 0; r_i < r_num_bins; r_i++) {
   1302 						r_req.rx_ptr = _bcm_unpack_hash_flex_bin_cmd(r_req.rx_ptr, r_p_bin_cmd+r_i);
   1303 					}
   1304 				}
   1305 			}
   1306 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_fields);
   1307 			if (*r_req.rx_ptr++ == 1) {
   1308 				r_p_flex_field = NULL;
   1309 			} else {
   1310 				r_p_flex_field = sal_alloc(r_num_fields*sizeof(bcm_hash_flex_field_t), "traverse r_flex_field");
   1311 				if (r_p_flex_field == NULL) {
   1312 					r_rv = BCM_E_MEMORY;
   1313 				} else {
   1314 					for (r_i = 0; r_i < r_num_fields; r_i++) {
   1315 						r_req.rx_ptr = _bcm_unpack_hash_flex_field(r_req.rx_ptr, r_p_flex_field+r_i);
   1316 					}
   1317 				}
   1318 			}
   1319 
   1320 			if (BCM_SUCCESS(r_rv)) {
   1321 				r_rv = cb(unit, r_p_cfg, r_num_bins, r_p_bin_cmd, r_num_fields, r_p_flex_field, user_data);
   1322 			}
   1323 
   1324 			if (r_p_bin_cmd != NULL) {
   1325 				sal_free(r_p_bin_cmd);
   1326 			}
   1327 			if (r_p_flex_field != NULL) {
   1328 				sal_free(r_p_flex_field);
   1329 			}
   1330 
   1331 			if (BCM_FAILURE(r_rv)) {
   1332 				break;
   1333 			}
   1334 		}
   1335 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1336 	}
   1337 
   1338 	return r_rv;
   1339 }
   1340 
   1341 int
   1342 bcm_client_instru_sflow_encap_traverse(
   1343 	int	unit,
   1344 	bcm_instru_sflow_encap_traverse_cb	cb,
   1345 	void *	user_data)
   1346 {
   1347 	bcm_rlink_traverse_data_t	r_req;
   1348 	int	r_rv;
   1349 	uint32	r_key[] = {
   1350 		0xb940a220,0x44e0c1bd,0x9bfd9616,0xb95430c3,0xdeef329e };
   1351 	bcm_instru_sflow_encap_info_t	r_sflow_encap_info;
   1352 	bcm_instru_sflow_encap_info_t *	r_p_sflow_encap_info;
   1353 
   1354 	sal_memset(&r_req, 0, sizeof(r_req));
   1355 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1356 	if (BCM_SUCCESS(r_rv)) {
   1357 		/* Pack request */
   1358 		/* Skip unit */
   1359 
   1360 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1361 			/* Unpack reply */
   1362 			/* Skip unit */
   1363 			if (*r_req.rx_ptr++ == 1) {
   1364 				r_p_sflow_encap_info = NULL;
   1365 			} else {
   1366 				r_p_sflow_encap_info = &r_sflow_encap_info;
   1367 				r_req.rx_ptr = _bcm_unpack_instru_sflow_encap_info(r_req.rx_ptr, r_p_sflow_encap_info);
   1368 			}
   1369 
   1370 			r_rv = cb(unit, r_p_sflow_encap_info, user_data);
   1371 
   1372 			if (BCM_FAILURE(r_rv)) {
   1373 				break;
   1374 			}
   1375 		}
   1376 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1377 	}
   1378 
   1379 	return r_rv;
   1380 }
   1381 
   1382 int
   1383 bcm_client_ipfix_rate_traverse(
   1384 	int	unit,
   1385 	bcm_ipfix_rate_traverse_cb	cb,
   1386 	void *	userdata)
   1387 {
   1388 	bcm_rlink_traverse_data_t	r_req;
   1389 	int	r_rv;
   1390 	uint32	r_key[] = {
   1391 		0x46a4972e,0x92ec830b,0x9b8f6d89,0x04fc1820,0x272f503f };
   1392 	bcm_ipfix_rate_t	r_rate_info;
   1393 	bcm_ipfix_rate_t *	r_p_rate_info;
   1394 
   1395 	sal_memset(&r_req, 0, sizeof(r_req));
   1396 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1397 	if (BCM_SUCCESS(r_rv)) {
   1398 		/* Pack request */
   1399 		/* Skip unit */
   1400 
   1401 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1402 			/* Unpack reply */
   1403 			/* Skip unit */
   1404 			if (*r_req.rx_ptr++ == 1) {
   1405 				r_p_rate_info = NULL;
   1406 			} else {
   1407 				r_p_rate_info = &r_rate_info;
   1408 				r_req.rx_ptr = _bcm_unpack_ipfix_rate(r_req.rx_ptr, r_p_rate_info);
   1409 			}
   1410 
   1411 			r_rv = cb(unit, r_p_rate_info, userdata);
   1412 
   1413 			if (BCM_FAILURE(r_rv)) {
   1414 				break;
   1415 			}
   1416 		}
   1417 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1418 	}
   1419 
   1420 	return r_rv;
   1421 }
   1422 
   1423 #ifdef	INCLUDE_L3
   1424 
   1425 int
   1426 bcm_client_ipmc_traverse(
   1427 	int	unit,
   1428 	uint32	flags,
   1429 	bcm_ipmc_traverse_cb	cb,
   1430 	void *	user_data)
   1431 {
   1432 	bcm_rlink_traverse_data_t	r_req;
   1433 	int	r_rv;
   1434 	uint32	r_key[] = {
   1435 		0xe6cd13ba,0x125638c6,0xbbe75b93,0x7e25925e,0x0d8b8c42 };
   1436 	bcm_ipmc_addr_t	r_info;
   1437 	bcm_ipmc_addr_t *	r_p_info;
   1438 
   1439 	sal_memset(&r_req, 0, sizeof(r_req));
   1440 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1441 	if (BCM_SUCCESS(r_rv)) {
   1442 		/* Pack request */
   1443 		/* Skip unit */
   1444 		BCM_PACK_U32(r_req.tx_ptr, flags);
   1445 
   1446 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1447 			/* Unpack reply */
   1448 			/* Skip unit */
   1449 			if (*r_req.rx_ptr++ == 1) {
   1450 				r_p_info = NULL;
   1451 			} else {
   1452 				r_p_info = &r_info;
   1453 				r_req.rx_ptr = _bcm_unpack_ipmc_addr(r_req.rx_ptr, r_p_info);
   1454 			}
   1455 
   1456 			r_rv = cb(unit, r_p_info, user_data);
   1457 
   1458 			if (BCM_FAILURE(r_rv)) {
   1459 				break;
   1460 			}
   1461 		}
   1462 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1463 	}
   1464 
   1465 	return r_rv;
   1466 }
   1467 
   1468 #endif	/* INCLUDE_L3 */
   1469 
   1470 int
   1471 bcm_client_l2_auth_traverse(
   1472 	int	unit,
   1473 	bcm_l2_auth_traverse_cb	trav_fn,
   1474 	void *	user_data)
   1475 {
   1476 	bcm_rlink_traverse_data_t	r_req;
   1477 	int	r_rv;
   1478 	uint32	r_key[] = {
   1479 		0x9ec5f6e7,0x2f479259,0xc3625b7f,0xc9630cc7,0x2b8f401f };
   1480 	bcm_l2_auth_addr_t	r_info;
   1481 	bcm_l2_auth_addr_t *	r_p_info;
   1482 
   1483 	sal_memset(&r_req, 0, sizeof(r_req));
   1484 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1485 	if (BCM_SUCCESS(r_rv)) {
   1486 		/* Pack request */
   1487 		/* Skip unit */
   1488 
   1489 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1490 			/* Unpack reply */
   1491 			/* Skip unit */
   1492 			if (*r_req.rx_ptr++ == 1) {
   1493 				r_p_info = NULL;
   1494 			} else {
   1495 				r_p_info = &r_info;
   1496 				r_req.rx_ptr = _bcm_unpack_l2_auth_addr(r_req.rx_ptr, r_p_info);
   1497 			}
   1498 
   1499 			r_rv = trav_fn(unit, r_p_info, user_data);
   1500 
   1501 			if (BCM_FAILURE(r_rv)) {
   1502 				break;
   1503 			}
   1504 		}
   1505 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1506 	}
   1507 
   1508 	return r_rv;
   1509 }
   1510 
   1511 #ifdef	INCLUDE_L3
   1512 
   1513 int
   1514 bcm_client_l2_change_fields_traverse(
   1515 	int	unit,
   1516 	bcm_l2_change_fields_traverse_cb	cb,
   1517 	void *	user_data)
   1518 {
   1519 	bcm_rlink_traverse_data_t	r_req;
   1520 	int	r_rv;
   1521 	uint32	r_key[] = {
   1522 		0xe0d937aa,0xd45dd961,0xb9e1228d,0x865531fc,0x3feb0e69 };
   1523 	bcm_l2_change_fields_t	r_l2_fields_info;
   1524 	bcm_l2_change_fields_t *	r_p_l2_fields_info;
   1525 
   1526 	sal_memset(&r_req, 0, sizeof(r_req));
   1527 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1528 	if (BCM_SUCCESS(r_rv)) {
   1529 		/* Pack request */
   1530 		/* Skip unit */
   1531 
   1532 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1533 			/* Unpack reply */
   1534 			/* Skip unit */
   1535 			if (*r_req.rx_ptr++ == 1) {
   1536 				r_p_l2_fields_info = NULL;
   1537 			} else {
   1538 				r_p_l2_fields_info = &r_l2_fields_info;
   1539 				r_req.rx_ptr = _bcm_unpack_l2_change_fields(r_req.rx_ptr, r_p_l2_fields_info);
   1540 			}
   1541 
   1542 			r_rv = cb(unit, r_p_l2_fields_info, user_data);
   1543 
   1544 			if (BCM_FAILURE(r_rv)) {
   1545 				break;
   1546 			}
   1547 		}
   1548 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1549 	}
   1550 
   1551 	return r_rv;
   1552 }
   1553 
   1554 #endif	/* INCLUDE_L3 */
   1555 
   1556 int
   1557 bcm_client_l2_egress_traverse(
   1558 	int	unit,
   1559 	bcm_l2_egress_traverse_cb	trav_fn,
   1560 	void *	user_data)
   1561 {
   1562 	bcm_rlink_traverse_data_t	r_req;
   1563 	int	r_rv;
   1564 	uint32	r_key[] = {
   1565 		0xb8c6c76d,0x66647c41,0xaaf33868,0x35da5d0a,0x53e675bb };
   1566 	bcm_l2_egress_t	r_egr;
   1567 	bcm_l2_egress_t *	r_p_egr;
   1568 
   1569 	sal_memset(&r_req, 0, sizeof(r_req));
   1570 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1571 	if (BCM_SUCCESS(r_rv)) {
   1572 		/* Pack request */
   1573 		/* Skip unit */
   1574 
   1575 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1576 			/* Unpack reply */
   1577 			/* Skip unit */
   1578 			if (*r_req.rx_ptr++ == 1) {
   1579 				r_p_egr = NULL;
   1580 			} else {
   1581 				r_p_egr = &r_egr;
   1582 				r_req.rx_ptr = _bcm_unpack_l2_egress(r_req.rx_ptr, r_p_egr);
   1583 			}
   1584 
   1585 			r_rv = trav_fn(unit, r_p_egr, user_data);
   1586 
   1587 			if (BCM_FAILURE(r_rv)) {
   1588 				break;
   1589 			}
   1590 		}
   1591 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1592 	}
   1593 
   1594 	return r_rv;
   1595 }
   1596 
   1597 int
   1598 bcm_client_l2_mac_port_traverse(
   1599 	int	unit,
   1600 	bcm_l2_mac_port_traverse_cb	cb,
   1601 	void *	user_data)
   1602 {
   1603 	bcm_rlink_traverse_data_t	r_req;
   1604 	int	r_rv;
   1605 	uint32	r_key[] = {
   1606 		0xe62643c8,0x8af78de7,0x9b5abb3c,0x5831fc7b,0x4ef6b3bc };
   1607 	bcm_l2_mac_port_t	r_mac_port;
   1608 	bcm_l2_mac_port_t *	r_p_mac_port;
   1609 
   1610 	sal_memset(&r_req, 0, sizeof(r_req));
   1611 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1612 	if (BCM_SUCCESS(r_rv)) {
   1613 		/* Pack request */
   1614 		/* Skip unit */
   1615 
   1616 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1617 			/* Unpack reply */
   1618 			/* Skip unit */
   1619 			if (*r_req.rx_ptr++ == 1) {
   1620 				r_p_mac_port = NULL;
   1621 			} else {
   1622 				r_p_mac_port = &r_mac_port;
   1623 				r_req.rx_ptr = _bcm_unpack_l2_mac_port(r_req.rx_ptr, r_p_mac_port);
   1624 			}
   1625 
   1626 			r_rv = cb(unit, r_p_mac_port, user_data);
   1627 
   1628 			if (BCM_FAILURE(r_rv)) {
   1629 				break;
   1630 			}
   1631 		}
   1632 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1633 	}
   1634 
   1635 	return r_rv;
   1636 }
   1637 
   1638 int
   1639 bcm_client_l2_match_masked_traverse(
   1640 	int	unit,
   1641 	uint32	flags,
   1642 	bcm_l2_addr_t *	match_addr,
   1643 	bcm_l2_addr_t *	mask_addr,
   1644 	bcm_l2_traverse_cb	trav_fn,
   1645 	void *	user_data)
   1646 {
   1647 	bcm_rlink_traverse_data_t	r_req;
   1648 	int	r_rv;
   1649 	uint32	r_key[] = {
   1650 #ifndef	BCM_RPC_PBMP_64
   1651 		0x0396d57d,0x166559c9,0xbdc8e080,0x7734c265,0x5142f43f
   1652 #else
   1653 		0xf5ec06b5,0x2dd13ba9,0x061676c1,0x619a1933,0xae2fd4d2
   1654 #endif	/* BCM_RPC_PBMP_64 */
   1655 	};
   1656 	bcm_l2_addr_t	r_info;
   1657 	bcm_l2_addr_t *	r_p_info;
   1658 
   1659 	sal_memset(&r_req, 0, sizeof(r_req));
   1660 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1661 	if (BCM_SUCCESS(r_rv)) {
   1662 		/* Pack request */
   1663 		/* Skip unit */
   1664 		BCM_PACK_U32(r_req.tx_ptr, flags);
   1665 		if (match_addr == NULL) {
   1666 			BCM_PACK_U8(r_req.tx_ptr, 1);
   1667 		} else {
   1668 			BCM_PACK_U8(r_req.tx_ptr, 0);
   1669 			r_req.tx_ptr = _bcm_pack_l2_addr(r_req.tx_ptr, match_addr);
   1670 		}
   1671 		if (mask_addr == NULL) {
   1672 			BCM_PACK_U8(r_req.tx_ptr, 1);
   1673 		} else {
   1674 			BCM_PACK_U8(r_req.tx_ptr, 0);
   1675 			r_req.tx_ptr = _bcm_pack_l2_addr(r_req.tx_ptr, mask_addr);
   1676 		}
   1677 
   1678 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1679 			/* Unpack reply */
   1680 			/* Skip unit */
   1681 			if (*r_req.rx_ptr++ == 1) {
   1682 				r_p_info = NULL;
   1683 			} else {
   1684 				r_p_info = &r_info;
   1685 				r_req.rx_ptr = _bcm_unpack_l2_addr(r_req.rx_ptr, r_p_info);
   1686 			}
   1687 
   1688 			r_rv = trav_fn(unit, r_p_info, user_data);
   1689 
   1690 			if (BCM_FAILURE(r_rv)) {
   1691 				break;
   1692 			}
   1693 		}
   1694 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1695 	}
   1696 
   1697 	return r_rv;
   1698 }
   1699 
   1700 int
   1701 bcm_client_l2_matched_traverse(
   1702 	int	unit,
   1703 	uint32	flags,
   1704 	bcm_l2_addr_t *	match_addr,
   1705 	bcm_l2_traverse_cb	trav_fn,
   1706 	void *	user_data)
   1707 {
   1708 	bcm_rlink_traverse_data_t	r_req;
   1709 	int	r_rv;
   1710 	uint32	r_key[] = {
   1711 #ifndef	BCM_RPC_PBMP_64
   1712 		0xa3a533b9,0xba88c109,0xe886451e,0xaecc1c4b,0x8b0c3ad9
   1713 #else
   1714 		0x8337bf80,0xf9c0065e,0xd49ac356,0x5bf4fb73,0x07303de9
   1715 #endif	/* BCM_RPC_PBMP_64 */
   1716 	};
   1717 	bcm_l2_addr_t	r_info;
   1718 	bcm_l2_addr_t *	r_p_info;
   1719 
   1720 	sal_memset(&r_req, 0, sizeof(r_req));
   1721 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1722 	if (BCM_SUCCESS(r_rv)) {
   1723 		/* Pack request */
   1724 		/* Skip unit */
   1725 		BCM_PACK_U32(r_req.tx_ptr, flags);
   1726 		if (match_addr == NULL) {
   1727 			BCM_PACK_U8(r_req.tx_ptr, 1);
   1728 		} else {
   1729 			BCM_PACK_U8(r_req.tx_ptr, 0);
   1730 			r_req.tx_ptr = _bcm_pack_l2_addr(r_req.tx_ptr, match_addr);
   1731 		}
   1732 
   1733 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1734 			/* Unpack reply */
   1735 			/* Skip unit */
   1736 			if (*r_req.rx_ptr++ == 1) {
   1737 				r_p_info = NULL;
   1738 			} else {
   1739 				r_p_info = &r_info;
   1740 				r_req.rx_ptr = _bcm_unpack_l2_addr(r_req.rx_ptr, r_p_info);
   1741 			}
   1742 
   1743 			r_rv = trav_fn(unit, r_p_info, user_data);
   1744 
   1745 			if (BCM_FAILURE(r_rv)) {
   1746 				break;
   1747 			}
   1748 		}
   1749 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1750 	}
   1751 
   1752 	return r_rv;
   1753 }
   1754 
   1755 int
   1756 bcm_client_l2_station_traverse(
   1757 	int	unit,
   1758 	bcm_l2_station_traverse_cb	trav_fn,
   1759 	void *	user_data)
   1760 {
   1761 	bcm_rlink_traverse_data_t	r_req;
   1762 	int	r_rv;
   1763 	uint32	r_key[] = {
   1764 		0x0a2abfad,0xb9ef458a,0xd9875a99,0x33e667b4,0xd1a36089 };
   1765 	bcm_l2_station_t	r_l2_station_addr;
   1766 	bcm_l2_station_t *	r_p_l2_station_addr;
   1767 
   1768 	sal_memset(&r_req, 0, sizeof(r_req));
   1769 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1770 	if (BCM_SUCCESS(r_rv)) {
   1771 		/* Pack request */
   1772 		/* Skip unit */
   1773 
   1774 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1775 			/* Unpack reply */
   1776 			/* Skip unit */
   1777 			if (*r_req.rx_ptr++ == 1) {
   1778 				r_p_l2_station_addr = NULL;
   1779 			} else {
   1780 				r_p_l2_station_addr = &r_l2_station_addr;
   1781 				r_req.rx_ptr = _bcm_unpack_l2_station(r_req.rx_ptr, r_p_l2_station_addr);
   1782 			}
   1783 
   1784 			r_rv = trav_fn(unit, r_p_l2_station_addr, user_data);
   1785 
   1786 			if (BCM_FAILURE(r_rv)) {
   1787 				break;
   1788 			}
   1789 		}
   1790 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1791 	}
   1792 
   1793 	return r_rv;
   1794 }
   1795 
   1796 int
   1797 bcm_client_l2_traverse(
   1798 	int	unit,
   1799 	bcm_l2_traverse_cb	trav_fn,
   1800 	void *	user_data)
   1801 {
   1802 	bcm_rlink_traverse_data_t	r_req;
   1803 	int	r_rv;
   1804 	uint32	r_key[] = {
   1805 		0x60a22b31,0x6ec6ca4f,0xe1b0ce78,0xee3264b2,0x1e544bd4 };
   1806 	bcm_l2_addr_t	r_info;
   1807 	bcm_l2_addr_t *	r_p_info;
   1808 
   1809 	sal_memset(&r_req, 0, sizeof(r_req));
   1810 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1811 	if (BCM_SUCCESS(r_rv)) {
   1812 		/* Pack request */
   1813 		/* Skip unit */
   1814 
   1815 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1816 			/* Unpack reply */
   1817 			/* Skip unit */
   1818 			if (*r_req.rx_ptr++ == 1) {
   1819 				r_p_info = NULL;
   1820 			} else {
   1821 				r_p_info = &r_info;
   1822 				r_req.rx_ptr = _bcm_unpack_l2_addr(r_req.rx_ptr, r_p_info);
   1823 			}
   1824 
   1825 			r_rv = trav_fn(unit, r_p_info, user_data);
   1826 
   1827 			if (BCM_FAILURE(r_rv)) {
   1828 				break;
   1829 			}
   1830 		}
   1831 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1832 	}
   1833 
   1834 	return r_rv;
   1835 }
   1836 
   1837 #ifdef	INCLUDE_L3
   1838 
   1839 int
   1840 bcm_client_l2gre_tunnel_initiator_traverse(
   1841 	int	unit,
   1842 	bcm_tunnel_initiator_traverse_cb	cb,
   1843 	void *	user_data)
   1844 {
   1845 	bcm_rlink_traverse_data_t	r_req;
   1846 	int	r_rv;
   1847 	uint32	r_key[] = {
   1848 		0x5930b6da,0xe0ea0015,0x7ec8c0bd,0xe95b013f,0x856bac4c };
   1849 	bcm_tunnel_initiator_t	r_info;
   1850 	bcm_tunnel_initiator_t *	r_p_info;
   1851 
   1852 	sal_memset(&r_req, 0, sizeof(r_req));
   1853 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1854 	if (BCM_SUCCESS(r_rv)) {
   1855 		/* Pack request */
   1856 		/* Skip unit */
   1857 
   1858 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1859 			/* Unpack reply */
   1860 			/* Skip unit */
   1861 			if (*r_req.rx_ptr++ == 1) {
   1862 				r_p_info = NULL;
   1863 			} else {
   1864 				r_p_info = &r_info;
   1865 				r_req.rx_ptr = _bcm_unpack_tunnel_initiator(r_req.rx_ptr, r_p_info);
   1866 			}
   1867 
   1868 			r_rv = cb(unit, r_p_info, user_data);
   1869 
   1870 			if (BCM_FAILURE(r_rv)) {
   1871 				break;
   1872 			}
   1873 		}
   1874 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1875 	}
   1876 
   1877 	return r_rv;
   1878 }
   1879 
   1880 int
   1881 bcm_client_l2gre_tunnel_terminator_traverse(
   1882 	int	unit,
   1883 	bcm_tunnel_terminator_traverse_cb	cb,
   1884 	void *	user_data)
   1885 {
   1886 	bcm_rlink_traverse_data_t	r_req;
   1887 	int	r_rv;
   1888 	uint32	r_key[] = {
   1889 		0x4e505a92,0x21e818f4,0x37e0072f,0xd5c79292,0x4a7a67a2 };
   1890 	bcm_tunnel_terminator_t	r_info;
   1891 	bcm_tunnel_terminator_t *	r_p_info;
   1892 
   1893 	sal_memset(&r_req, 0, sizeof(r_req));
   1894 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1895 	if (BCM_SUCCESS(r_rv)) {
   1896 		/* Pack request */
   1897 		/* Skip unit */
   1898 
   1899 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1900 			/* Unpack reply */
   1901 			/* Skip unit */
   1902 			if (*r_req.rx_ptr++ == 1) {
   1903 				r_p_info = NULL;
   1904 			} else {
   1905 				r_p_info = &r_info;
   1906 				r_req.rx_ptr = _bcm_unpack_tunnel_terminator(r_req.rx_ptr, r_p_info);
   1907 			}
   1908 
   1909 			r_rv = cb(unit, r_p_info, user_data);
   1910 
   1911 			if (BCM_FAILURE(r_rv)) {
   1912 				break;
   1913 			}
   1914 		}
   1915 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1916 	}
   1917 
   1918 	return r_rv;
   1919 }
   1920 
   1921 int
   1922 bcm_client_l2gre_vpn_traverse(
   1923 	int	unit,
   1924 	bcm_l2gre_vpn_traverse_cb	cb,
   1925 	void *	user_data)
   1926 {
   1927 	bcm_rlink_traverse_data_t	r_req;
   1928 	int	r_rv;
   1929 	uint32	r_key[] = {
   1930 		0x0a1e5cfa,0x9f4444e7,0xb2958c32,0x3a17c284,0x98f9394a };
   1931 	bcm_l2gre_vpn_config_t	r_info;
   1932 	bcm_l2gre_vpn_config_t *	r_p_info;
   1933 
   1934 	sal_memset(&r_req, 0, sizeof(r_req));
   1935 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1936 	if (BCM_SUCCESS(r_rv)) {
   1937 		/* Pack request */
   1938 		/* Skip unit */
   1939 
   1940 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1941 			/* Unpack reply */
   1942 			/* Skip unit */
   1943 			if (*r_req.rx_ptr++ == 1) {
   1944 				r_p_info = NULL;
   1945 			} else {
   1946 				r_p_info = &r_info;
   1947 				r_req.rx_ptr = _bcm_unpack_l2gre_vpn_config(r_req.rx_ptr, r_p_info);
   1948 			}
   1949 
   1950 			r_rv = cb(unit, r_p_info, user_data);
   1951 
   1952 			if (BCM_FAILURE(r_rv)) {
   1953 				break;
   1954 			}
   1955 		}
   1956 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   1957 	}
   1958 
   1959 	return r_rv;
   1960 }
   1961 
   1962 int
   1963 bcm_client_l3_ecmp_traverse(
   1964 	int	unit,
   1965 	bcm_l3_ecmp_traverse_cb	trav_fn,
   1966 	void *	user_data)
   1967 {
   1968 	bcm_rlink_traverse_data_t	r_req;
   1969 	int	r_rv;
   1970 	int	r_i;
   1971 	uint32	r_key[] = {
   1972 		0x61c3ab33,0xa8a60460,0xb2413345,0xf7c9766c,0xa8184f60 };
   1973 	bcm_l3_egress_ecmp_t	r_ecmp_info;
   1974 	int	r_ecmp_member_count;
   1975 	bcm_l3_egress_ecmp_t *	r_p_ecmp_info;
   1976 	bcm_l3_ecmp_member_t *	r_p_ecmp_member_array;
   1977 
   1978 	sal_memset(&r_req, 0, sizeof(r_req));
   1979 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   1980 	if (BCM_SUCCESS(r_rv)) {
   1981 		/* Pack request */
   1982 		/* Skip unit */
   1983 
   1984 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   1985 			/* Unpack reply */
   1986 			r_rv = BCM_E_NONE;
   1987 			/* Skip unit */
   1988 			if (*r_req.rx_ptr++ == 1) {
   1989 				r_p_ecmp_info = NULL;
   1990 			} else {
   1991 				r_p_ecmp_info = &r_ecmp_info;
   1992 				r_req.rx_ptr = _bcm_unpack_l3_egress_ecmp(r_req.rx_ptr, r_p_ecmp_info);
   1993 			}
   1994 			BCM_UNPACK_U32(r_req.rx_ptr, r_ecmp_member_count);
   1995 			if (*r_req.rx_ptr++ == 1) {
   1996 				r_p_ecmp_member_array = NULL;
   1997 			} else {
   1998 				r_p_ecmp_member_array = sal_alloc(r_ecmp_member_count*sizeof(bcm_l3_ecmp_member_t), "traverse r_ecmp_member_array");
   1999 				if (r_p_ecmp_member_array == NULL) {
   2000 					r_rv = BCM_E_MEMORY;
   2001 				} else {
   2002 					for (r_i = 0; r_i < r_ecmp_member_count; r_i++) {
   2003 						r_req.rx_ptr = _bcm_unpack_l3_ecmp_member(r_req.rx_ptr, r_p_ecmp_member_array+r_i);
   2004 					}
   2005 				}
   2006 			}
   2007 
   2008 			if (BCM_SUCCESS(r_rv)) {
   2009 				r_rv = trav_fn(unit, r_p_ecmp_info, r_ecmp_member_count, r_p_ecmp_member_array, user_data);
   2010 			}
   2011 
   2012 			if (r_p_ecmp_member_array != NULL) {
   2013 				sal_free(r_p_ecmp_member_array);
   2014 			}
   2015 
   2016 			if (BCM_FAILURE(r_rv)) {
   2017 				break;
   2018 			}
   2019 		}
   2020 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2021 	}
   2022 
   2023 	return r_rv;
   2024 }
   2025 
   2026 int
   2027 bcm_client_l3_egress_arp_traverse(
   2028 	int	unit,
   2029 	bcm_l3_egress_traverse_cb	trav_fn,
   2030 	void *	user_data)
   2031 {
   2032 	bcm_rlink_traverse_data_t	r_req;
   2033 	int	r_rv;
   2034 	uint32	r_key[] = {
   2035 		0xafff1cdc,0x187fb02c,0x1ad2b98b,0xdb01f81d,0x81afe9a7 };
   2036 	bcm_if_t	r_intf;
   2037 	bcm_l3_egress_t	r_info;
   2038 	bcm_l3_egress_t *	r_p_info;
   2039 
   2040 	sal_memset(&r_req, 0, sizeof(r_req));
   2041 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2042 	if (BCM_SUCCESS(r_rv)) {
   2043 		/* Pack request */
   2044 		/* Skip unit */
   2045 
   2046 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2047 			/* Unpack reply */
   2048 			/* Skip unit */
   2049 			BCM_UNPACK_U32(r_req.rx_ptr, r_intf);
   2050 			if (*r_req.rx_ptr++ == 1) {
   2051 				r_p_info = NULL;
   2052 			} else {
   2053 				r_p_info = &r_info;
   2054 				r_req.rx_ptr = _bcm_unpack_l3_egress(r_req.rx_ptr, r_p_info);
   2055 			}
   2056 
   2057 			r_rv = trav_fn(unit, r_intf, r_p_info, user_data);
   2058 
   2059 			if (BCM_FAILURE(r_rv)) {
   2060 				break;
   2061 			}
   2062 		}
   2063 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2064 	}
   2065 
   2066 	return r_rv;
   2067 }
   2068 
   2069 int
   2070 bcm_client_l3_egress_ecmp_resilient_traverse(
   2071 	int	unit,
   2072 	uint32	flags,
   2073 	bcm_l3_egress_ecmp_resilient_entry_t *	match_entry,
   2074 	bcm_l3_egress_ecmp_resilient_traverse_cb	trav_fn,
   2075 	void *	user_data)
   2076 {
   2077 	bcm_rlink_traverse_data_t	r_req;
   2078 	int	r_rv;
   2079 	uint32	r_key[] = {
   2080 		0xbf99b390,0xccf9cdce,0x076e8030,0xc9b9472f,0xa9e73130 };
   2081 	bcm_l3_egress_ecmp_resilient_entry_t	r_entry;
   2082 	bcm_l3_egress_ecmp_resilient_entry_t *	r_p_entry;
   2083 
   2084 	sal_memset(&r_req, 0, sizeof(r_req));
   2085 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2086 	if (BCM_SUCCESS(r_rv)) {
   2087 		/* Pack request */
   2088 		/* Skip unit */
   2089 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2090 		if (match_entry == NULL) {
   2091 			BCM_PACK_U8(r_req.tx_ptr, 1);
   2092 		} else {
   2093 			BCM_PACK_U8(r_req.tx_ptr, 0);
   2094 			r_req.tx_ptr = _bcm_pack_l3_egress_ecmp_resilient_entry(r_req.tx_ptr, match_entry);
   2095 		}
   2096 
   2097 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2098 			/* Unpack reply */
   2099 			/* Skip unit */
   2100 			if (*r_req.rx_ptr++ == 1) {
   2101 				r_p_entry = NULL;
   2102 			} else {
   2103 				r_p_entry = &r_entry;
   2104 				r_req.rx_ptr = _bcm_unpack_l3_egress_ecmp_resilient_entry(r_req.rx_ptr, r_p_entry);
   2105 			}
   2106 
   2107 			r_rv = trav_fn(unit, r_p_entry, user_data);
   2108 
   2109 			if (BCM_FAILURE(r_rv)) {
   2110 				break;
   2111 			}
   2112 		}
   2113 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2114 	}
   2115 
   2116 	return r_rv;
   2117 }
   2118 
   2119 int
   2120 bcm_client_l3_egress_ecmp_traverse(
   2121 	int	unit,
   2122 	bcm_l3_egress_ecmp_traverse_cb	trav_fn,
   2123 	void *	user_data)
   2124 {
   2125 	bcm_rlink_traverse_data_t	r_req;
   2126 	int	r_rv;
   2127 	int	r_i;
   2128 	uint32	r_key[] = {
   2129 		0x6e067c6f,0xe832c80e,0x240868d6,0x83302b31,0x92c7a1e7 };
   2130 	bcm_l3_egress_ecmp_t	r_ecmp;
   2131 	int	r_intf_count;
   2132 	bcm_l3_egress_ecmp_t *	r_p_ecmp;
   2133 	bcm_if_t *	r_p_intf_array;
   2134 
   2135 	sal_memset(&r_req, 0, sizeof(r_req));
   2136 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2137 	if (BCM_SUCCESS(r_rv)) {
   2138 		/* Pack request */
   2139 		/* Skip unit */
   2140 
   2141 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2142 			/* Unpack reply */
   2143 			r_rv = BCM_E_NONE;
   2144 			/* Skip unit */
   2145 			if (*r_req.rx_ptr++ == 1) {
   2146 				r_p_ecmp = NULL;
   2147 			} else {
   2148 				r_p_ecmp = &r_ecmp;
   2149 				r_req.rx_ptr = _bcm_unpack_l3_egress_ecmp(r_req.rx_ptr, r_p_ecmp);
   2150 			}
   2151 			BCM_UNPACK_U32(r_req.rx_ptr, r_intf_count);
   2152 			if (*r_req.rx_ptr++ == 1) {
   2153 				r_p_intf_array = NULL;
   2154 			} else {
   2155 				r_p_intf_array = sal_alloc(r_intf_count*sizeof(bcm_if_t), "traverse r_intf_array");
   2156 				if (r_p_intf_array == NULL) {
   2157 					r_rv = BCM_E_MEMORY;
   2158 				} else {
   2159 					for (r_i = 0; r_i < r_intf_count; r_i++) {
   2160 						BCM_UNPACK_U32(r_req.rx_ptr, *(r_p_intf_array+r_i));
   2161 					}
   2162 				}
   2163 			}
   2164 
   2165 			if (BCM_SUCCESS(r_rv)) {
   2166 				r_rv = trav_fn(unit, r_p_ecmp, r_intf_count, r_p_intf_array, user_data);
   2167 			}
   2168 
   2169 			if (r_p_intf_array != NULL) {
   2170 				sal_free(r_p_intf_array);
   2171 			}
   2172 
   2173 			if (BCM_FAILURE(r_rv)) {
   2174 				break;
   2175 			}
   2176 		}
   2177 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2178 	}
   2179 
   2180 	return r_rv;
   2181 }
   2182 
   2183 int
   2184 bcm_client_l3_egress_multipath_traverse(
   2185 	int	unit,
   2186 	bcm_l3_egress_multipath_traverse_cb	trav_fn,
   2187 	void *	user_data)
   2188 {
   2189 	bcm_rlink_traverse_data_t	r_req;
   2190 	int	r_rv;
   2191 	int	r_i;
   2192 	uint32	r_key[] = {
   2193 		0x22876dbb,0x559c93df,0x84dcc649,0x6d3fe0ae,0x14dbec70 };
   2194 	bcm_if_t	r_mpintf;
   2195 	int	r_intf_count;
   2196 	bcm_if_t *	r_p_intf_array;
   2197 
   2198 	sal_memset(&r_req, 0, sizeof(r_req));
   2199 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2200 	if (BCM_SUCCESS(r_rv)) {
   2201 		/* Pack request */
   2202 		/* Skip unit */
   2203 
   2204 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2205 			/* Unpack reply */
   2206 			r_rv = BCM_E_NONE;
   2207 			/* Skip unit */
   2208 			BCM_UNPACK_U32(r_req.rx_ptr, r_mpintf);
   2209 			BCM_UNPACK_U32(r_req.rx_ptr, r_intf_count);
   2210 			if (*r_req.rx_ptr++ == 1) {
   2211 				r_p_intf_array = NULL;
   2212 			} else {
   2213 				r_p_intf_array = sal_alloc(r_intf_count*sizeof(bcm_if_t), "traverse r_intf_array");
   2214 				if (r_p_intf_array == NULL) {
   2215 					r_rv = BCM_E_MEMORY;
   2216 				} else {
   2217 					for (r_i = 0; r_i < r_intf_count; r_i++) {
   2218 						BCM_UNPACK_U32(r_req.rx_ptr, *(r_p_intf_array+r_i));
   2219 					}
   2220 				}
   2221 			}
   2222 
   2223 			if (BCM_SUCCESS(r_rv)) {
   2224 				r_rv = trav_fn(unit, r_mpintf, r_intf_count, r_p_intf_array, user_data);
   2225 			}
   2226 
   2227 			if (r_p_intf_array != NULL) {
   2228 				sal_free(r_p_intf_array);
   2229 			}
   2230 
   2231 			if (BCM_FAILURE(r_rv)) {
   2232 				break;
   2233 			}
   2234 		}
   2235 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2236 	}
   2237 
   2238 	return r_rv;
   2239 }
   2240 
   2241 int
   2242 bcm_client_l3_egress_traverse(
   2243 	int	unit,
   2244 	bcm_l3_egress_traverse_cb	trav_fn,
   2245 	void *	user_data)
   2246 {
   2247 	bcm_rlink_traverse_data_t	r_req;
   2248 	int	r_rv;
   2249 	uint32	r_key[] = {
   2250 		0x5ab66d8d,0x122fdf0c,0x33bd285e,0x1f8c56ed,0x1ad886d3 };
   2251 	bcm_if_t	r_intf;
   2252 	bcm_l3_egress_t	r_info;
   2253 	bcm_l3_egress_t *	r_p_info;
   2254 
   2255 	sal_memset(&r_req, 0, sizeof(r_req));
   2256 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2257 	if (BCM_SUCCESS(r_rv)) {
   2258 		/* Pack request */
   2259 		/* Skip unit */
   2260 
   2261 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2262 			/* Unpack reply */
   2263 			/* Skip unit */
   2264 			BCM_UNPACK_U32(r_req.rx_ptr, r_intf);
   2265 			if (*r_req.rx_ptr++ == 1) {
   2266 				r_p_info = NULL;
   2267 			} else {
   2268 				r_p_info = &r_info;
   2269 				r_req.rx_ptr = _bcm_unpack_l3_egress(r_req.rx_ptr, r_p_info);
   2270 			}
   2271 
   2272 			r_rv = trav_fn(unit, r_intf, r_p_info, user_data);
   2273 
   2274 			if (BCM_FAILURE(r_rv)) {
   2275 				break;
   2276 			}
   2277 		}
   2278 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2279 	}
   2280 
   2281 	return r_rv;
   2282 }
   2283 
   2284 int
   2285 bcm_client_l3_host_traverse(
   2286 	int	unit,
   2287 	uint32	flags,
   2288 	uint32	start,
   2289 	uint32	end,
   2290 	bcm_l3_host_traverse_cb	cb,
   2291 	void *	user_data)
   2292 {
   2293 	bcm_rlink_traverse_data_t	r_req;
   2294 	int	r_rv;
   2295 	uint32	r_key[] = {
   2296 		0x65fa4078,0x7c353975,0xc28647e2,0x1d35a278,0xcbaeef5d };
   2297 	int	r_index;
   2298 	bcm_l3_host_t	r_info;
   2299 	bcm_l3_host_t *	r_p_info;
   2300 
   2301 	sal_memset(&r_req, 0, sizeof(r_req));
   2302 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2303 	if (BCM_SUCCESS(r_rv)) {
   2304 		/* Pack request */
   2305 		/* Skip unit */
   2306 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2307 		BCM_PACK_U32(r_req.tx_ptr, start);
   2308 		BCM_PACK_U32(r_req.tx_ptr, end);
   2309 
   2310 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2311 			/* Unpack reply */
   2312 			/* Skip unit */
   2313 			BCM_UNPACK_U32(r_req.rx_ptr, r_index);
   2314 			if (*r_req.rx_ptr++ == 1) {
   2315 				r_p_info = NULL;
   2316 			} else {
   2317 				r_p_info = &r_info;
   2318 				r_req.rx_ptr = _bcm_unpack_l3_host(r_req.rx_ptr, r_p_info);
   2319 			}
   2320 
   2321 			r_rv = cb(unit, r_index, r_p_info, user_data);
   2322 
   2323 			if (BCM_FAILURE(r_rv)) {
   2324 				break;
   2325 			}
   2326 		}
   2327 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2328 	}
   2329 
   2330 	return r_rv;
   2331 }
   2332 
   2333 int
   2334 bcm_client_l3_ingress_traverse(
   2335 	int	unit,
   2336 	bcm_l3_ingress_traverse_cb	trav_fn,
   2337 	void *	user_data)
   2338 {
   2339 	bcm_rlink_traverse_data_t	r_req;
   2340 	int	r_rv;
   2341 	uint32	r_key[] = {
   2342 		0x167de67a,0x4556a271,0xdc2c824a,0x9422f096,0x666e0a05 };
   2343 	bcm_if_t	r_intf_id;
   2344 	bcm_l3_ingress_t	r_ing_intf;
   2345 	bcm_l3_ingress_t *	r_p_ing_intf;
   2346 
   2347 	sal_memset(&r_req, 0, sizeof(r_req));
   2348 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2349 	if (BCM_SUCCESS(r_rv)) {
   2350 		/* Pack request */
   2351 		/* Skip unit */
   2352 
   2353 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2354 			/* Unpack reply */
   2355 			/* Skip unit */
   2356 			BCM_UNPACK_U32(r_req.rx_ptr, r_intf_id);
   2357 			if (*r_req.rx_ptr++ == 1) {
   2358 				r_p_ing_intf = NULL;
   2359 			} else {
   2360 				r_p_ing_intf = &r_ing_intf;
   2361 				r_req.rx_ptr = _bcm_unpack_l3_ingress(r_req.rx_ptr, r_p_ing_intf);
   2362 			}
   2363 
   2364 			r_rv = trav_fn(unit, r_intf_id, r_p_ing_intf, user_data);
   2365 
   2366 			if (BCM_FAILURE(r_rv)) {
   2367 				break;
   2368 			}
   2369 		}
   2370 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2371 	}
   2372 
   2373 	return r_rv;
   2374 }
   2375 
   2376 int
   2377 bcm_client_l3_large_nat_egress_traverse(
   2378 	int	unit,
   2379 	bcm_l3_large_nat_egress_traverse_cb	cb,
   2380 	void *	user_data)
   2381 {
   2382 	bcm_rlink_traverse_data_t	r_req;
   2383 	int	r_rv;
   2384 	uint32	r_key[] = {
   2385 		0x69af71dc,0x705dd0c4,0xc00705b8,0xdbe5a092,0xcb22060f };
   2386 	bcm_l3_large_nat_egress_t	r_nat_info;
   2387 	bcm_l3_large_nat_egress_t *	r_p_nat_info;
   2388 
   2389 	sal_memset(&r_req, 0, sizeof(r_req));
   2390 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2391 	if (BCM_SUCCESS(r_rv)) {
   2392 		/* Pack request */
   2393 		/* Skip unit */
   2394 
   2395 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2396 			/* Unpack reply */
   2397 			/* Skip unit */
   2398 			if (*r_req.rx_ptr++ == 1) {
   2399 				r_p_nat_info = NULL;
   2400 			} else {
   2401 				r_p_nat_info = &r_nat_info;
   2402 				r_req.rx_ptr = _bcm_unpack_l3_large_nat_egress(r_req.rx_ptr, r_p_nat_info);
   2403 			}
   2404 
   2405 			r_rv = cb(unit, r_p_nat_info, user_data);
   2406 
   2407 			if (BCM_FAILURE(r_rv)) {
   2408 				break;
   2409 			}
   2410 		}
   2411 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2412 	}
   2413 
   2414 	return r_rv;
   2415 }
   2416 
   2417 int
   2418 bcm_client_l3_nat_egress_traverse(
   2419 	int	unit,
   2420 	uint32	flags,
   2421 	uint32	start,
   2422 	uint32	end,
   2423 	bcm_l3_nat_egress_traverse_cb	cb,
   2424 	void *	user_data)
   2425 {
   2426 	bcm_rlink_traverse_data_t	r_req;
   2427 	int	r_rv;
   2428 	uint32	r_key[] = {
   2429 		0xa1121fdb,0x44050e85,0x65ebc921,0xb733a73a,0xf5017ada };
   2430 	int	r_index;
   2431 	bcm_l3_nat_egress_t	r_nat_info;
   2432 	bcm_l3_nat_egress_t *	r_p_nat_info;
   2433 
   2434 	sal_memset(&r_req, 0, sizeof(r_req));
   2435 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2436 	if (BCM_SUCCESS(r_rv)) {
   2437 		/* Pack request */
   2438 		/* Skip unit */
   2439 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2440 		BCM_PACK_U32(r_req.tx_ptr, start);
   2441 		BCM_PACK_U32(r_req.tx_ptr, end);
   2442 
   2443 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2444 			/* Unpack reply */
   2445 			/* Skip unit */
   2446 			BCM_UNPACK_U32(r_req.rx_ptr, r_index);
   2447 			if (*r_req.rx_ptr++ == 1) {
   2448 				r_p_nat_info = NULL;
   2449 			} else {
   2450 				r_p_nat_info = &r_nat_info;
   2451 				r_req.rx_ptr = _bcm_unpack_l3_nat_egress(r_req.rx_ptr, r_p_nat_info);
   2452 			}
   2453 
   2454 			r_rv = cb(unit, r_index, r_p_nat_info, user_data);
   2455 
   2456 			if (BCM_FAILURE(r_rv)) {
   2457 				break;
   2458 			}
   2459 		}
   2460 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2461 	}
   2462 
   2463 	return r_rv;
   2464 }
   2465 
   2466 int
   2467 bcm_client_l3_nat_ingress_traverse(
   2468 	int	unit,
   2469 	uint32	flags,
   2470 	uint32	start,
   2471 	uint32	end,
   2472 	bcm_l3_nat_ingress_traverse_cb	cb,
   2473 	void *	user_data)
   2474 {
   2475 	bcm_rlink_traverse_data_t	r_req;
   2476 	int	r_rv;
   2477 	uint32	r_key[] = {
   2478 		0xd28cc963,0xe38b1845,0xd4394a78,0xc171d148,0x12286049 };
   2479 	int	r_index;
   2480 	bcm_l3_nat_ingress_t	r_nat_info;
   2481 	bcm_l3_nat_ingress_t *	r_p_nat_info;
   2482 
   2483 	sal_memset(&r_req, 0, sizeof(r_req));
   2484 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2485 	if (BCM_SUCCESS(r_rv)) {
   2486 		/* Pack request */
   2487 		/* Skip unit */
   2488 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2489 		BCM_PACK_U32(r_req.tx_ptr, start);
   2490 		BCM_PACK_U32(r_req.tx_ptr, end);
   2491 
   2492 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2493 			/* Unpack reply */
   2494 			/* Skip unit */
   2495 			BCM_UNPACK_U32(r_req.rx_ptr, r_index);
   2496 			if (*r_req.rx_ptr++ == 1) {
   2497 				r_p_nat_info = NULL;
   2498 			} else {
   2499 				r_p_nat_info = &r_nat_info;
   2500 				r_req.rx_ptr = _bcm_unpack_l3_nat_ingress(r_req.rx_ptr, r_p_nat_info);
   2501 			}
   2502 
   2503 			r_rv = cb(unit, r_index, r_p_nat_info, user_data);
   2504 
   2505 			if (BCM_FAILURE(r_rv)) {
   2506 				break;
   2507 			}
   2508 		}
   2509 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2510 	}
   2511 
   2512 	return r_rv;
   2513 }
   2514 
   2515 int
   2516 bcm_client_l3_route_traverse(
   2517 	int	unit,
   2518 	uint32	flags,
   2519 	uint32	start,
   2520 	uint32	end,
   2521 	bcm_l3_route_traverse_cb	trav_fn,
   2522 	void *	user_data)
   2523 {
   2524 	bcm_rlink_traverse_data_t	r_req;
   2525 	int	r_rv;
   2526 	uint32	r_key[] = {
   2527 		0x3abb9ca2,0x9b9849d1,0x3fa6df34,0x889a975e,0xf18da8c9 };
   2528 	int	r_index;
   2529 	bcm_l3_route_t	r_info;
   2530 	bcm_l3_route_t *	r_p_info;
   2531 
   2532 	sal_memset(&r_req, 0, sizeof(r_req));
   2533 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2534 	if (BCM_SUCCESS(r_rv)) {
   2535 		/* Pack request */
   2536 		/* Skip unit */
   2537 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2538 		BCM_PACK_U32(r_req.tx_ptr, start);
   2539 		BCM_PACK_U32(r_req.tx_ptr, end);
   2540 
   2541 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2542 			/* Unpack reply */
   2543 			/* Skip unit */
   2544 			BCM_UNPACK_U32(r_req.rx_ptr, r_index);
   2545 			if (*r_req.rx_ptr++ == 1) {
   2546 				r_p_info = NULL;
   2547 			} else {
   2548 				r_p_info = &r_info;
   2549 				r_req.rx_ptr = _bcm_unpack_l3_route(r_req.rx_ptr, r_p_info);
   2550 			}
   2551 
   2552 			r_rv = trav_fn(unit, r_index, r_p_info, user_data);
   2553 
   2554 			if (BCM_FAILURE(r_rv)) {
   2555 				break;
   2556 			}
   2557 		}
   2558 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2559 	}
   2560 
   2561 	return r_rv;
   2562 }
   2563 
   2564 int
   2565 bcm_client_l3_source_bind_traverse(
   2566 	int	unit,
   2567 	bcm_l3_source_bind_traverse_cb	cb,
   2568 	void *	user_data)
   2569 {
   2570 	bcm_rlink_traverse_data_t	r_req;
   2571 	int	r_rv;
   2572 	uint32	r_key[] = {
   2573 		0xd2779d49,0xa91716ef,0xd4db8d97,0x5419c650,0xceaaa2c9 };
   2574 	bcm_l3_source_bind_t	r_info;
   2575 	bcm_l3_source_bind_t *	r_p_info;
   2576 
   2577 	sal_memset(&r_req, 0, sizeof(r_req));
   2578 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2579 	if (BCM_SUCCESS(r_rv)) {
   2580 		/* Pack request */
   2581 		/* Skip unit */
   2582 
   2583 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2584 			/* Unpack reply */
   2585 			/* Skip unit */
   2586 			if (*r_req.rx_ptr++ == 1) {
   2587 				r_p_info = NULL;
   2588 			} else {
   2589 				r_p_info = &r_info;
   2590 				r_req.rx_ptr = _bcm_unpack_l3_source_bind(r_req.rx_ptr, r_p_info);
   2591 			}
   2592 
   2593 			r_rv = cb(unit, r_p_info, user_data);
   2594 
   2595 			if (BCM_FAILURE(r_rv)) {
   2596 				break;
   2597 			}
   2598 		}
   2599 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2600 	}
   2601 
   2602 	return r_rv;
   2603 }
   2604 
   2605 int
   2606 bcm_client_l3_vpbr_traverse(
   2607 	int	unit,
   2608 	uint32	flags,
   2609 	bcm_l3_vpbr_traverse_cb	cb,
   2610 	void *	user_data)
   2611 {
   2612 	bcm_rlink_traverse_data_t	r_req;
   2613 	int	r_rv;
   2614 	uint32	r_key[] = {
   2615 		0x13d58d97,0x0d995f47,0xa89f8451,0x6c40eab3,0x5d749ca9 };
   2616 	bcm_l3_vpbr_entry_t	r_entry;
   2617 	bcm_l3_vpbr_entry_t *	r_p_entry;
   2618 
   2619 	sal_memset(&r_req, 0, sizeof(r_req));
   2620 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2621 	if (BCM_SUCCESS(r_rv)) {
   2622 		/* Pack request */
   2623 		/* Skip unit */
   2624 		BCM_PACK_U32(r_req.tx_ptr, flags);
   2625 
   2626 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2627 			/* Unpack reply */
   2628 			/* Skip unit */
   2629 			if (*r_req.rx_ptr++ == 1) {
   2630 				r_p_entry = NULL;
   2631 			} else {
   2632 				r_p_entry = &r_entry;
   2633 				r_req.rx_ptr = _bcm_unpack_l3_vpbr_entry(r_req.rx_ptr, r_p_entry);
   2634 			}
   2635 
   2636 			r_rv = cb(unit, r_p_entry, user_data);
   2637 
   2638 			if (BCM_FAILURE(r_rv)) {
   2639 				break;
   2640 			}
   2641 		}
   2642 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2643 	}
   2644 
   2645 	return r_rv;
   2646 }
   2647 
   2648 int
   2649 bcm_client_mim_vpn_traverse(
   2650 	int	unit,
   2651 	bcm_mim_vpn_traverse_cb	cb,
   2652 	void *	user_data)
   2653 {
   2654 	bcm_rlink_traverse_data_t	r_req;
   2655 	int	r_rv;
   2656 	uint32	r_key[] = {
   2657 		0x532bf474,0x5fc8a40c,0x05cfbef4,0x927b5787,0x09fc1173 };
   2658 	bcm_mim_vpn_config_t	r_info;
   2659 	bcm_mim_vpn_config_t *	r_p_info;
   2660 
   2661 	sal_memset(&r_req, 0, sizeof(r_req));
   2662 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2663 	if (BCM_SUCCESS(r_rv)) {
   2664 		/* Pack request */
   2665 		/* Skip unit */
   2666 
   2667 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2668 			/* Unpack reply */
   2669 			/* Skip unit */
   2670 			if (*r_req.rx_ptr++ == 1) {
   2671 				r_p_info = NULL;
   2672 			} else {
   2673 				r_p_info = &r_info;
   2674 				r_req.rx_ptr = _bcm_unpack_mim_vpn_config(r_req.rx_ptr, r_p_info);
   2675 			}
   2676 
   2677 			r_rv = cb(unit, r_p_info, user_data);
   2678 
   2679 			if (BCM_FAILURE(r_rv)) {
   2680 				break;
   2681 			}
   2682 		}
   2683 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2684 	}
   2685 
   2686 	return r_rv;
   2687 }
   2688 
   2689 #endif	/* INCLUDE_L3 */
   2690 
   2691 int
   2692 bcm_client_mirror_destination_traverse(
   2693 	int	unit,
   2694 	bcm_mirror_destination_traverse_cb	cb,
   2695 	void *	user_data)
   2696 {
   2697 	bcm_rlink_traverse_data_t	r_req;
   2698 	int	r_rv;
   2699 	uint32	r_key[] = {
   2700 		0xdcd8d11e,0x2fee11c8,0xfdc6b378,0x9fefee8c,0x8980f333 };
   2701 	bcm_mirror_destination_t	r_mirror_dest;
   2702 	bcm_mirror_destination_t *	r_p_mirror_dest;
   2703 
   2704 	sal_memset(&r_req, 0, sizeof(r_req));
   2705 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2706 	if (BCM_SUCCESS(r_rv)) {
   2707 		/* Pack request */
   2708 		/* Skip unit */
   2709 
   2710 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2711 			/* Unpack reply */
   2712 			/* Skip unit */
   2713 			if (*r_req.rx_ptr++ == 1) {
   2714 				r_p_mirror_dest = NULL;
   2715 			} else {
   2716 				r_p_mirror_dest = &r_mirror_dest;
   2717 				r_req.rx_ptr = _bcm_unpack_mirror_destination(r_req.rx_ptr, r_p_mirror_dest);
   2718 			}
   2719 
   2720 			r_rv = cb(unit, r_p_mirror_dest, user_data);
   2721 
   2722 			if (BCM_FAILURE(r_rv)) {
   2723 				break;
   2724 			}
   2725 		}
   2726 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2727 	}
   2728 
   2729 	return r_rv;
   2730 }
   2731 
   2732 #ifdef	INCLUDE_L3
   2733 
   2734 int
   2735 bcm_client_mpls_entropy_identifier_traverse(
   2736 	int	unit,
   2737 	bcm_mpls_entropy_identifier_traverse_cb	cb,
   2738 	void *	user_data)
   2739 {
   2740 	bcm_rlink_traverse_data_t	r_req;
   2741 	int	r_rv;
   2742 	uint32	r_key[] = {
   2743 		0xcab468f9,0x4a3c978a,0xbf3eaad3,0x341f8494,0x05609c55 };
   2744 	bcm_mpls_entropy_identifier_t	r_info;
   2745 	bcm_mpls_entropy_identifier_t *	r_p_info;
   2746 
   2747 	sal_memset(&r_req, 0, sizeof(r_req));
   2748 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2749 	if (BCM_SUCCESS(r_rv)) {
   2750 		/* Pack request */
   2751 		/* Skip unit */
   2752 
   2753 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2754 			/* Unpack reply */
   2755 			/* Skip unit */
   2756 			if (*r_req.rx_ptr++ == 1) {
   2757 				r_p_info = NULL;
   2758 			} else {
   2759 				r_p_info = &r_info;
   2760 				r_req.rx_ptr = _bcm_unpack_mpls_entropy_identifier(r_req.rx_ptr, r_p_info);
   2761 			}
   2762 
   2763 			r_rv = cb(unit, r_p_info, user_data);
   2764 
   2765 			if (BCM_FAILURE(r_rv)) {
   2766 				break;
   2767 			}
   2768 		}
   2769 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2770 	}
   2771 
   2772 	return r_rv;
   2773 }
   2774 
   2775 int
   2776 bcm_client_mpls_esi_encap_traverse(
   2777 	int	unit,
   2778 	bcm_mpls_esi_encap_traverse_cb	cb,
   2779 	void *	user_data)
   2780 {
   2781 	bcm_rlink_traverse_data_t	r_req;
   2782 	int	r_rv;
   2783 	uint32	r_key[] = {
   2784 		0xd106a109,0x33252c67,0xeffc9ac7,0xeb61d6ab,0xe1ee8754 };
   2785 	bcm_mpls_esi_info_t	r_info;
   2786 	bcm_mpls_esi_info_t *	r_p_info;
   2787 
   2788 	sal_memset(&r_req, 0, sizeof(r_req));
   2789 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2790 	if (BCM_SUCCESS(r_rv)) {
   2791 		/* Pack request */
   2792 		/* Skip unit */
   2793 
   2794 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2795 			/* Unpack reply */
   2796 			/* Skip unit */
   2797 			if (*r_req.rx_ptr++ == 1) {
   2798 				r_p_info = NULL;
   2799 			} else {
   2800 				r_p_info = &r_info;
   2801 				r_req.rx_ptr = _bcm_unpack_mpls_esi_info(r_req.rx_ptr, r_p_info);
   2802 			}
   2803 
   2804 			r_rv = cb(unit, r_p_info, user_data);
   2805 
   2806 			if (BCM_FAILURE(r_rv)) {
   2807 				break;
   2808 			}
   2809 		}
   2810 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2811 	}
   2812 
   2813 	return r_rv;
   2814 }
   2815 
   2816 int
   2817 bcm_client_mpls_port_traverse(
   2818 	int	unit,
   2819 	bcm_mpls_port_traverse_info_t	additional_info,
   2820 	bcm_mpls_port_traverse_cb	trav_fn,
   2821 	void *	user_data)
   2822 {
   2823 	bcm_rlink_traverse_data_t	r_req;
   2824 	int	r_rv;
   2825 	uint32	r_key[] = {
   2826 		0x68d48889,0x8916263e,0x15cff8b5,0x9c8d6abd,0x9c994231 };
   2827 	bcm_mpls_port_t	r_mpls_port;
   2828 	bcm_mpls_port_t *	r_p_mpls_port;
   2829 
   2830 	sal_memset(&r_req, 0, sizeof(r_req));
   2831 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2832 	if (BCM_SUCCESS(r_rv)) {
   2833 		/* Pack request */
   2834 		/* Skip unit */
   2835 		BCM_PACK_U32(r_req.tx_ptr, additional_info.flags);
   2836 		BCM_PACK_U32(r_req.tx_ptr, additional_info.flags2);
   2837 		BCM_PACK_U32(r_req.tx_ptr, additional_info.traverse_flags);
   2838 		BCM_PACK_U32(r_req.tx_ptr, additional_info.vpn);
   2839 
   2840 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2841 			/* Unpack reply */
   2842 			/* Skip unit */
   2843 			if (*r_req.rx_ptr++ == 1) {
   2844 				r_p_mpls_port = NULL;
   2845 			} else {
   2846 				r_p_mpls_port = &r_mpls_port;
   2847 				r_req.rx_ptr = _bcm_unpack_mpls_port(r_req.rx_ptr, r_p_mpls_port);
   2848 			}
   2849 
   2850 			r_rv = trav_fn(unit, r_p_mpls_port, user_data);
   2851 
   2852 			if (BCM_FAILURE(r_rv)) {
   2853 				break;
   2854 			}
   2855 		}
   2856 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2857 	}
   2858 
   2859 	return r_rv;
   2860 }
   2861 
   2862 int
   2863 bcm_client_mpls_special_label_egress_traverse(
   2864 	int	unit,
   2865 	bcm_mpls_special_label_egress_traverse_cb	cb,
   2866 	void *	user_data)
   2867 {
   2868 	bcm_rlink_traverse_data_t	r_req;
   2869 	int	r_rv;
   2870 	uint32	r_key[] = {
   2871 		0xdc9f2dc6,0x4d998332,0x5fc5f44a,0x0e5fdb8a,0x94bfcb4f };
   2872 	bcm_mpls_special_label_type_t	r_label_type;
   2873 	bcm_mpls_special_label_t	r_label_info;
   2874 	bcm_mpls_special_label_type_t *	r_p_label_type;
   2875 	bcm_mpls_special_label_t *	r_p_label_info;
   2876 
   2877 	sal_memset(&r_req, 0, sizeof(r_req));
   2878 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2879 	if (BCM_SUCCESS(r_rv)) {
   2880 		/* Pack request */
   2881 		/* Skip unit */
   2882 
   2883 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2884 			/* Unpack reply */
   2885 			/* Skip unit */
   2886 			if (*r_req.rx_ptr++ == 1) {
   2887 				r_p_label_type = NULL;
   2888 			} else {
   2889 				r_p_label_type = &r_label_type;
   2890 				BCM_UNPACK_U32(r_req.rx_ptr, *r_p_label_type);
   2891 			}
   2892 			if (*r_req.rx_ptr++ == 1) {
   2893 				r_p_label_info = NULL;
   2894 			} else {
   2895 				r_p_label_info = &r_label_info;
   2896 				r_req.rx_ptr = _bcm_unpack_mpls_special_label(r_req.rx_ptr, r_p_label_info);
   2897 			}
   2898 
   2899 			r_rv = cb(unit, r_p_label_type, r_p_label_info, user_data);
   2900 
   2901 			if (BCM_FAILURE(r_rv)) {
   2902 				break;
   2903 			}
   2904 		}
   2905 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2906 	}
   2907 
   2908 	return r_rv;
   2909 }
   2910 
   2911 int
   2912 bcm_client_mpls_special_label_identifier_traverse(
   2913 	int	unit,
   2914 	bcm_mpls_special_label_identifier_traverse_cb	cb,
   2915 	void *	user_data)
   2916 {
   2917 	bcm_rlink_traverse_data_t	r_req;
   2918 	int	r_rv;
   2919 	uint32	r_key[] = {
   2920 		0xf3c794d4,0xc30aaa9f,0x492a6eba,0x858f6aad,0x44f84b93 };
   2921 	bcm_mpls_special_label_type_t	r_label_type;
   2922 	bcm_mpls_special_label_t	r_label_info;
   2923 	bcm_mpls_special_label_type_t *	r_p_label_type;
   2924 	bcm_mpls_special_label_t *	r_p_label_info;
   2925 
   2926 	sal_memset(&r_req, 0, sizeof(r_req));
   2927 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2928 	if (BCM_SUCCESS(r_rv)) {
   2929 		/* Pack request */
   2930 		/* Skip unit */
   2931 
   2932 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2933 			/* Unpack reply */
   2934 			/* Skip unit */
   2935 			if (*r_req.rx_ptr++ == 1) {
   2936 				r_p_label_type = NULL;
   2937 			} else {
   2938 				r_p_label_type = &r_label_type;
   2939 			}
   2940 			if (*r_req.rx_ptr++ == 1) {
   2941 				r_p_label_info = NULL;
   2942 			} else {
   2943 				r_p_label_info = &r_label_info;
   2944 			}
   2945 
   2946 			r_rv = cb(unit, r_p_label_type, r_p_label_info, user_data);
   2947 
   2948 			if (BCM_FAILURE(r_rv)) {
   2949 				break;
   2950 			}
   2951 		}
   2952 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   2953 	}
   2954 
   2955 	return r_rv;
   2956 }
   2957 
   2958 int
   2959 bcm_client_mpls_tunnel_initiator_traverse(
   2960 	int	unit,
   2961 	bcm_mpls_tunnel_initiator_traverse_info_t *	additional_info,
   2962 	bcm_mpls_tunnel_initiator_traverse_cb	cb,
   2963 	void *	user_data)
   2964 {
   2965 	bcm_rlink_traverse_data_t	r_req;
   2966 	int	r_rv;
   2967 	uint32	r_key[] = {
   2968 		0x6342aa9d,0x9a80546b,0x35413215,0x38d202c1,0x3a737e17 };
   2969 	int	r_num_labels;
   2970 	bcm_mpls_egress_label_t	r_label_array;
   2971 	bcm_mpls_egress_label_t *	r_p_label_array;
   2972 
   2973 	sal_memset(&r_req, 0, sizeof(r_req));
   2974 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   2975 	if (BCM_SUCCESS(r_rv)) {
   2976 		/* Pack request */
   2977 		/* Skip unit */
   2978 		if (additional_info == NULL) {
   2979 			BCM_PACK_U8(r_req.tx_ptr, 1);
   2980 		} else {
   2981 			BCM_PACK_U8(r_req.tx_ptr, 0);
   2982 			BCM_PACK_U32(r_req.tx_ptr, additional_info->flags);
   2983 		}
   2984 
   2985 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   2986 			/* Unpack reply */
   2987 			/* Skip unit */
   2988 			BCM_UNPACK_U32(r_req.rx_ptr, r_num_labels);
   2989 			if (*r_req.rx_ptr++ == 1) {
   2990 				r_p_label_array = NULL;
   2991 			} else {
   2992 				r_p_label_array = &r_label_array;
   2993 				r_req.rx_ptr = _bcm_unpack_mpls_egress_label(r_req.rx_ptr, r_p_label_array);
   2994 			}
   2995 
   2996 			r_rv = cb(unit, r_num_labels, r_p_label_array, user_data);
   2997 
   2998 			if (BCM_FAILURE(r_rv)) {
   2999 				break;
   3000 			}
   3001 		}
   3002 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3003 	}
   3004 
   3005 	return r_rv;
   3006 }
   3007 
   3008 int
   3009 bcm_client_mpls_tunnel_switch_traverse(
   3010 	int	unit,
   3011 	bcm_mpls_tunnel_switch_traverse_cb	cb,
   3012 	void *	user_data)
   3013 {
   3014 	bcm_rlink_traverse_data_t	r_req;
   3015 	int	r_rv;
   3016 	uint32	r_key[] = {
   3017 		0xe78321d1,0x5f8959d3,0x6b5dc068,0x3bd16a35,0x8fa5673f };
   3018 	bcm_mpls_tunnel_switch_t	r_info;
   3019 	bcm_mpls_tunnel_switch_t *	r_p_info;
   3020 
   3021 	sal_memset(&r_req, 0, sizeof(r_req));
   3022 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3023 	if (BCM_SUCCESS(r_rv)) {
   3024 		/* Pack request */
   3025 		/* Skip unit */
   3026 
   3027 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3028 			/* Unpack reply */
   3029 			/* Skip unit */
   3030 			if (*r_req.rx_ptr++ == 1) {
   3031 				r_p_info = NULL;
   3032 			} else {
   3033 				r_p_info = &r_info;
   3034 				r_req.rx_ptr = _bcm_unpack_mpls_tunnel_switch(r_req.rx_ptr, r_p_info);
   3035 			}
   3036 
   3037 			r_rv = cb(unit, r_p_info, user_data);
   3038 
   3039 			if (BCM_FAILURE(r_rv)) {
   3040 				break;
   3041 			}
   3042 		}
   3043 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3044 	}
   3045 
   3046 	return r_rv;
   3047 }
   3048 
   3049 int
   3050 bcm_client_mpls_vpn_traverse(
   3051 	int	unit,
   3052 	bcm_mpls_vpn_traverse_cb	cb,
   3053 	void *	user_data)
   3054 {
   3055 	bcm_rlink_traverse_data_t	r_req;
   3056 	int	r_rv;
   3057 	uint32	r_key[] = {
   3058 		0xa6b62e4d,0xf0357ad3,0x3eb5c1f8,0xc1112545,0xff607622 };
   3059 	bcm_mpls_vpn_config_t	r_info;
   3060 	bcm_mpls_vpn_config_t *	r_p_info;
   3061 
   3062 	sal_memset(&r_req, 0, sizeof(r_req));
   3063 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3064 	if (BCM_SUCCESS(r_rv)) {
   3065 		/* Pack request */
   3066 		/* Skip unit */
   3067 
   3068 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3069 			/* Unpack reply */
   3070 			/* Skip unit */
   3071 			if (*r_req.rx_ptr++ == 1) {
   3072 				r_p_info = NULL;
   3073 			} else {
   3074 				r_p_info = &r_info;
   3075 				r_req.rx_ptr = _bcm_unpack_mpls_vpn_config(r_req.rx_ptr, r_p_info);
   3076 			}
   3077 
   3078 			r_rv = cb(unit, r_p_info, user_data);
   3079 
   3080 			if (BCM_FAILURE(r_rv)) {
   3081 				break;
   3082 			}
   3083 		}
   3084 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3085 	}
   3086 
   3087 	return r_rv;
   3088 }
   3089 
   3090 #endif	/* INCLUDE_L3 */
   3091 
   3092 int
   3093 bcm_client_multicast_encap_extension_traverse(
   3094 	int	unit,
   3095 	bcm_multicast_encap_extension_traverse_cb	trav_fn,
   3096 	void *	user_data)
   3097 {
   3098 	bcm_rlink_traverse_data_t	r_req;
   3099 	int	r_rv;
   3100 	uint32	r_key[] = {
   3101 		0x1e5b3d1b,0xf70617f9,0x6ca206fc,0xbd060cf5,0xaed7dd12 };
   3102 	bcm_if_t	r_multicast_replication_index;
   3103 	uint32	r_flags;
   3104 
   3105 	sal_memset(&r_req, 0, sizeof(r_req));
   3106 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3107 	if (BCM_SUCCESS(r_rv)) {
   3108 		/* Pack request */
   3109 		/* Skip unit */
   3110 
   3111 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3112 			/* Unpack reply */
   3113 			/* Skip unit */
   3114 			BCM_UNPACK_U32(r_req.rx_ptr, r_multicast_replication_index);
   3115 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
   3116 
   3117 			r_rv = trav_fn(unit, r_multicast_replication_index, r_flags, user_data);
   3118 
   3119 			if (BCM_FAILURE(r_rv)) {
   3120 				break;
   3121 			}
   3122 		}
   3123 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3124 	}
   3125 
   3126 	return r_rv;
   3127 }
   3128 
   3129 int
   3130 bcm_client_multicast_group_traverse(
   3131 	int	unit,
   3132 	bcm_multicast_group_traverse_cb_t	trav_fn,
   3133 	uint32	flags,
   3134 	void *	user_data)
   3135 {
   3136 	bcm_rlink_traverse_data_t	r_req;
   3137 	int	r_rv;
   3138 	uint32	r_key[] = {
   3139 		0x609d585a,0x28d1d4b4,0x9dafcc73,0x0600d68f,0x56fdedd2 };
   3140 	bcm_multicast_t	r_group;
   3141 	uint32	r_flags;
   3142 
   3143 	sal_memset(&r_req, 0, sizeof(r_req));
   3144 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3145 	if (BCM_SUCCESS(r_rv)) {
   3146 		/* Pack request */
   3147 		/* Skip unit */
   3148 		BCM_PACK_U32(r_req.tx_ptr, flags);
   3149 
   3150 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3151 			/* Unpack reply */
   3152 			/* Skip unit */
   3153 			BCM_UNPACK_U32(r_req.rx_ptr, r_group);
   3154 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
   3155 
   3156 			r_rv = trav_fn(unit, r_group, r_flags, user_data);
   3157 
   3158 			if (BCM_FAILURE(r_rv)) {
   3159 				break;
   3160 			}
   3161 		}
   3162 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3163 	}
   3164 
   3165 	return r_rv;
   3166 }
   3167 
   3168 #ifdef	INCLUDE_L3
   3169 
   3170 int
   3171 bcm_client_niv_forward_traverse(
   3172 	int	unit,
   3173 	bcm_niv_forward_traverse_cb	cb,
   3174 	void *	user_data)
   3175 {
   3176 	bcm_rlink_traverse_data_t	r_req;
   3177 	int	r_rv;
   3178 	uint32	r_key[] = {
   3179 		0xdff5e37c,0x63f8f445,0x7eb5490d,0xae8f690c,0x87f6eec7 };
   3180 	bcm_niv_forward_t	r_iv_fwd_entry;
   3181 	bcm_niv_forward_t *	r_p_iv_fwd_entry;
   3182 
   3183 	sal_memset(&r_req, 0, sizeof(r_req));
   3184 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3185 	if (BCM_SUCCESS(r_rv)) {
   3186 		/* Pack request */
   3187 		/* Skip unit */
   3188 
   3189 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3190 			/* Unpack reply */
   3191 			/* Skip unit */
   3192 			if (*r_req.rx_ptr++ == 1) {
   3193 				r_p_iv_fwd_entry = NULL;
   3194 			} else {
   3195 				r_p_iv_fwd_entry = &r_iv_fwd_entry;
   3196 				r_req.rx_ptr = _bcm_unpack_niv_forward(r_req.rx_ptr, r_p_iv_fwd_entry);
   3197 			}
   3198 
   3199 			r_rv = cb(unit, r_p_iv_fwd_entry, user_data);
   3200 
   3201 			if (BCM_FAILURE(r_rv)) {
   3202 				break;
   3203 			}
   3204 		}
   3205 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3206 	}
   3207 
   3208 	return r_rv;
   3209 }
   3210 
   3211 int
   3212 bcm_client_niv_port_traverse(
   3213 	int	unit,
   3214 	bcm_niv_port_traverse_cb	cb,
   3215 	void *	user_data)
   3216 {
   3217 	bcm_rlink_traverse_data_t	r_req;
   3218 	int	r_rv;
   3219 	uint32	r_key[] = {
   3220 		0xf576f989,0xe875babe,0xdc063963,0xedd55a31,0xd47ff86a };
   3221 	bcm_niv_port_t	r_niv_port;
   3222 	bcm_niv_port_t *	r_p_niv_port;
   3223 
   3224 	sal_memset(&r_req, 0, sizeof(r_req));
   3225 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3226 	if (BCM_SUCCESS(r_rv)) {
   3227 		/* Pack request */
   3228 		/* Skip unit */
   3229 
   3230 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3231 			/* Unpack reply */
   3232 			/* Skip unit */
   3233 			if (*r_req.rx_ptr++ == 1) {
   3234 				r_p_niv_port = NULL;
   3235 			} else {
   3236 				r_p_niv_port = &r_niv_port;
   3237 				r_req.rx_ptr = _bcm_unpack_niv_port(r_req.rx_ptr, r_p_niv_port);
   3238 			}
   3239 
   3240 			r_rv = cb(unit, r_p_niv_port, user_data);
   3241 
   3242 			if (BCM_FAILURE(r_rv)) {
   3243 				break;
   3244 			}
   3245 		}
   3246 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3247 	}
   3248 
   3249 	return r_rv;
   3250 }
   3251 
   3252 #endif	/* INCLUDE_L3 */
   3253 
   3254 int
   3255 bcm_client_oam_endpoint_traverse(
   3256 	int	unit,
   3257 	bcm_oam_group_t	group,
   3258 	bcm_oam_endpoint_traverse_cb	cb,
   3259 	void *	user_data)
   3260 {
   3261 	bcm_rlink_traverse_data_t	r_req;
   3262 	int	r_rv;
   3263 	uint32	r_key[] = {
   3264 		0x84d3139b,0x63882899,0x779a64f2,0x780bebd5,0x7c6293da };
   3265 	bcm_oam_endpoint_info_t	r_endpoint_info;
   3266 	bcm_oam_endpoint_info_t *	r_p_endpoint_info;
   3267 
   3268 	sal_memset(&r_req, 0, sizeof(r_req));
   3269 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3270 	if (BCM_SUCCESS(r_rv)) {
   3271 		/* Pack request */
   3272 		/* Skip unit */
   3273 		BCM_PACK_U32(r_req.tx_ptr, group);
   3274 
   3275 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3276 			/* Unpack reply */
   3277 			/* Skip unit */
   3278 			if (*r_req.rx_ptr++ == 1) {
   3279 				r_p_endpoint_info = NULL;
   3280 			} else {
   3281 				r_p_endpoint_info = &r_endpoint_info;
   3282 				r_req.rx_ptr = _bcm_unpack_oam_endpoint_info(r_req.rx_ptr, r_p_endpoint_info);
   3283 			}
   3284 
   3285 			r_rv = cb(unit, r_p_endpoint_info, user_data);
   3286 
   3287 			if (BCM_FAILURE(r_rv)) {
   3288 				break;
   3289 			}
   3290 		}
   3291 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3292 	}
   3293 
   3294 	return r_rv;
   3295 }
   3296 
   3297 int
   3298 bcm_client_oam_group_traverse(
   3299 	int	unit,
   3300 	bcm_oam_group_traverse_cb	cb,
   3301 	void *	user_data)
   3302 {
   3303 	bcm_rlink_traverse_data_t	r_req;
   3304 	int	r_rv;
   3305 	uint32	r_key[] = {
   3306 		0xc0d84a55,0xb28f41a5,0xa3f7be33,0x6c24dde9,0x98e0eccb };
   3307 	bcm_oam_group_info_t	r_group_info;
   3308 	bcm_oam_group_info_t *	r_p_group_info;
   3309 
   3310 	sal_memset(&r_req, 0, sizeof(r_req));
   3311 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3312 	if (BCM_SUCCESS(r_rv)) {
   3313 		/* Pack request */
   3314 		/* Skip unit */
   3315 
   3316 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3317 			/* Unpack reply */
   3318 			/* Skip unit */
   3319 			if (*r_req.rx_ptr++ == 1) {
   3320 				r_p_group_info = NULL;
   3321 			} else {
   3322 				r_p_group_info = &r_group_info;
   3323 				r_req.rx_ptr = _bcm_unpack_oam_group_info(r_req.rx_ptr, r_p_group_info);
   3324 			}
   3325 
   3326 			r_rv = cb(unit, r_p_group_info, user_data);
   3327 
   3328 			if (BCM_FAILURE(r_rv)) {
   3329 				break;
   3330 			}
   3331 		}
   3332 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3333 	}
   3334 
   3335 	return r_rv;
   3336 }
   3337 
   3338 int
   3339 bcm_client_oam_pm_profile_traverse(
   3340 	int	unit,
   3341 	bcm_oam_pm_profile_traverse_cb	cb,
   3342 	void *	user_data)
   3343 {
   3344 	bcm_rlink_traverse_data_t	r_req;
   3345 	int	r_rv;
   3346 	uint32	r_key[] = {
   3347 		0xde7d15e2,0x10c7b82d,0x3bb91dba,0xbec325f2,0x41ca999f };
   3348 	bcm_oam_pm_profile_info_t	r_profile_info;
   3349 	bcm_oam_pm_profile_info_t *	r_p_profile_info;
   3350 
   3351 	sal_memset(&r_req, 0, sizeof(r_req));
   3352 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3353 	if (BCM_SUCCESS(r_rv)) {
   3354 		/* Pack request */
   3355 		/* Skip unit */
   3356 
   3357 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3358 			/* Unpack reply */
   3359 			/* Skip unit */
   3360 			if (*r_req.rx_ptr++ == 1) {
   3361 				r_p_profile_info = NULL;
   3362 			} else {
   3363 				r_p_profile_info = &r_profile_info;
   3364 				r_req.rx_ptr = _bcm_unpack_oam_pm_profile_info(r_req.rx_ptr, r_p_profile_info);
   3365 			}
   3366 
   3367 			r_rv = cb(unit, r_p_profile_info, user_data);
   3368 
   3369 			if (BCM_FAILURE(r_rv)) {
   3370 				break;
   3371 			}
   3372 		}
   3373 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3374 	}
   3375 
   3376 	return r_rv;
   3377 }
   3378 
   3379 int
   3380 bcm_client_policer_traverse(
   3381 	int	unit,
   3382 	bcm_policer_traverse_cb	cb,
   3383 	void *	user_data)
   3384 {
   3385 	bcm_rlink_traverse_data_t	r_req;
   3386 	int	r_rv;
   3387 	uint32	r_key[] = {
   3388 		0xf1700d39,0x5240c888,0x4932cc67,0xdfa88306,0x7424edf3 };
   3389 	bcm_policer_t	r_policer_id;
   3390 	bcm_policer_config_t	r_info;
   3391 	bcm_policer_config_t *	r_p_info;
   3392 
   3393 	sal_memset(&r_req, 0, sizeof(r_req));
   3394 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3395 	if (BCM_SUCCESS(r_rv)) {
   3396 		/* Pack request */
   3397 		/* Skip unit */
   3398 
   3399 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3400 			/* Unpack reply */
   3401 			/* Skip unit */
   3402 			BCM_UNPACK_U32(r_req.rx_ptr, r_policer_id);
   3403 			if (*r_req.rx_ptr++ == 1) {
   3404 				r_p_info = NULL;
   3405 			} else {
   3406 				r_p_info = &r_info;
   3407 				r_req.rx_ptr = _bcm_unpack_policer_config(r_req.rx_ptr, r_p_info);
   3408 			}
   3409 
   3410 			r_rv = cb(unit, r_policer_id, r_p_info, user_data);
   3411 
   3412 			if (BCM_FAILURE(r_rv)) {
   3413 				break;
   3414 			}
   3415 		}
   3416 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3417 	}
   3418 
   3419 	return r_rv;
   3420 }
   3421 
   3422 int
   3423 bcm_client_port_e2efc_remote_module_traverse(
   3424 	int	unit,
   3425 	bcm_port_e2efc_remote_module_traverse_cb	cb,
   3426 	void *	user_data)
   3427 {
   3428 	bcm_rlink_traverse_data_t	r_req;
   3429 	int	r_rv;
   3430 	uint32	r_key[] = {
   3431 		0xbb048347,0xb06d97d6,0x2f20eb36,0x1210bd53,0x94bde811 };
   3432 	bcm_module_t	r_remote_module;
   3433 	bcm_port_e2efc_mode_t	r_mode;
   3434 
   3435 	sal_memset(&r_req, 0, sizeof(r_req));
   3436 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3437 	if (BCM_SUCCESS(r_rv)) {
   3438 		/* Pack request */
   3439 		/* Skip unit */
   3440 
   3441 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3442 			/* Unpack reply */
   3443 			/* Skip unit */
   3444 			BCM_UNPACK_U32(r_req.rx_ptr, r_remote_module);
   3445 			BCM_UNPACK_U32(r_req.rx_ptr, r_mode);
   3446 
   3447 			r_rv = cb(unit, r_remote_module, r_mode, user_data);
   3448 
   3449 			if (BCM_FAILURE(r_rv)) {
   3450 				break;
   3451 			}
   3452 		}
   3453 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3454 	}
   3455 
   3456 	return r_rv;
   3457 }
   3458 
   3459 int
   3460 bcm_client_port_e2efc_remote_port_traverse(
   3461 	int	unit,
   3462 	bcm_port_e2efc_remote_port_traverse_cb	cb,
   3463 	void *	user_data)
   3464 {
   3465 	bcm_rlink_traverse_data_t	r_req;
   3466 	int	r_rv;
   3467 	uint32	r_key[] = {
   3468 		0x625ac1ae,0x1e171eed,0x7c4ca017,0xb3911667,0x19dc3de2 };
   3469 	int	r_rport_handle_id;
   3470 
   3471 	sal_memset(&r_req, 0, sizeof(r_req));
   3472 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3473 	if (BCM_SUCCESS(r_rv)) {
   3474 		/* Pack request */
   3475 		/* Skip unit */
   3476 
   3477 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3478 			/* Unpack reply */
   3479 			/* Skip unit */
   3480 			BCM_UNPACK_U32(r_req.rx_ptr, r_rport_handle_id);
   3481 
   3482 			r_rv = cb(unit, r_rport_handle_id, user_data);
   3483 
   3484 			if (BCM_FAILURE(r_rv)) {
   3485 				break;
   3486 			}
   3487 		}
   3488 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3489 	}
   3490 
   3491 	return r_rv;
   3492 }
   3493 
   3494 int
   3495 bcm_client_port_resource_traverse(
   3496 	int	unit,
   3497 	bcm_port_resource_traverse_cb	trav_fn,
   3498 	void *	user_data)
   3499 {
   3500 	bcm_rlink_traverse_data_t	r_req;
   3501 	int	r_rv;
   3502 	uint32	r_key[] = {
   3503 		0x77e30c28,0x25d0aaae,0x75a81f9c,0x5c9b3b00,0xbe3e9473 };
   3504 	bcm_port_resource_t	r_resource;
   3505 	bcm_port_resource_t *	r_p_resource;
   3506 
   3507 	sal_memset(&r_req, 0, sizeof(r_req));
   3508 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3509 	if (BCM_SUCCESS(r_rv)) {
   3510 		/* Pack request */
   3511 		/* Skip unit */
   3512 
   3513 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3514 			/* Unpack reply */
   3515 			/* Skip unit */
   3516 			if (*r_req.rx_ptr++ == 1) {
   3517 				r_p_resource = NULL;
   3518 			} else {
   3519 				r_p_resource = &r_resource;
   3520 				r_req.rx_ptr = _bcm_unpack_port_resource(r_req.rx_ptr, r_p_resource);
   3521 			}
   3522 
   3523 			r_rv = trav_fn(unit, r_p_resource, user_data);
   3524 
   3525 			if (BCM_FAILURE(r_rv)) {
   3526 				break;
   3527 			}
   3528 		}
   3529 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3530 	}
   3531 
   3532 	return r_rv;
   3533 }
   3534 
   3535 #ifdef	INCLUDE_L3
   3536 
   3537 int
   3538 bcm_client_proxy_egress_traverse(
   3539 	int	unit,
   3540 	bcm_proxy_egress_traverse_cb	trav_fn,
   3541 	void *	user_data)
   3542 {
   3543 	bcm_rlink_traverse_data_t	r_req;
   3544 	int	r_rv;
   3545 	uint32	r_key[] = {
   3546 		0x991de8b3,0xd507f533,0x79a88425,0x85992902,0xc42c48e8 };
   3547 	bcm_if_t	r_proxy_if_id;
   3548 	bcm_proxy_egress_t	r_info;
   3549 	bcm_proxy_egress_t *	r_p_info;
   3550 
   3551 	sal_memset(&r_req, 0, sizeof(r_req));
   3552 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3553 	if (BCM_SUCCESS(r_rv)) {
   3554 		/* Pack request */
   3555 		/* Skip unit */
   3556 
   3557 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3558 			/* Unpack reply */
   3559 			/* Skip unit */
   3560 			BCM_UNPACK_U32(r_req.rx_ptr, r_proxy_if_id);
   3561 			if (*r_req.rx_ptr++ == 1) {
   3562 				r_p_info = NULL;
   3563 			} else {
   3564 				r_p_info = &r_info;
   3565 				r_req.rx_ptr = _bcm_unpack_proxy_egress(r_req.rx_ptr, r_p_info);
   3566 			}
   3567 
   3568 			r_rv = trav_fn(unit, r_proxy_if_id, r_p_info, user_data);
   3569 
   3570 			if (BCM_FAILURE(r_rv)) {
   3571 				break;
   3572 			}
   3573 		}
   3574 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3575 	}
   3576 
   3577 	return r_rv;
   3578 }
   3579 
   3580 #endif	/* INCLUDE_L3 */
   3581 #ifdef	INCLUDE_PSTATS
   3582 
   3583 int
   3584 bcm_client_pstats_session_traverse(
   3585 	int	unit,
   3586 	bcm_pstats_session_traverse_cb	cb,
   3587 	void *	user_data)
   3588 {
   3589 	bcm_rlink_traverse_data_t	r_req;
   3590 	int	r_rv;
   3591 	int	r_i;
   3592 	uint32	r_key[] = {
   3593 		0x6365cc98,0x3ed346b9,0xb1dbab1e,0x854a8e1a,0xcd7c7c72 };
   3594 	bcm_pstats_session_id_t	r_session_id;
   3595 	int	r_array_count;
   3596 	bcm_pstats_session_element_t *	r_p_element_array;
   3597 
   3598 	sal_memset(&r_req, 0, sizeof(r_req));
   3599 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3600 	if (BCM_SUCCESS(r_rv)) {
   3601 		/* Pack request */
   3602 		/* Skip unit */
   3603 
   3604 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3605 			/* Unpack reply */
   3606 			r_rv = BCM_E_NONE;
   3607 			/* Skip unit */
   3608 			BCM_UNPACK_U32(r_req.rx_ptr, r_session_id);
   3609 			BCM_UNPACK_U32(r_req.rx_ptr, r_array_count);
   3610 			if (*r_req.rx_ptr++ == 1) {
   3611 				r_p_element_array = NULL;
   3612 			} else {
   3613 				r_p_element_array = sal_alloc(r_array_count*sizeof(bcm_pstats_session_element_t), "traverse r_element_array");
   3614 				if (r_p_element_array == NULL) {
   3615 					r_rv = BCM_E_MEMORY;
   3616 				} else {
   3617 					for (r_i = 0; r_i < r_array_count; r_i++) {
   3618 						r_req.rx_ptr = _bcm_unpack_pstats_session_element(r_req.rx_ptr, r_p_element_array+r_i);
   3619 					}
   3620 				}
   3621 			}
   3622 
   3623 			if (BCM_SUCCESS(r_rv)) {
   3624 				r_rv = cb(unit, r_session_id, r_array_count, r_p_element_array, user_data);
   3625 			}
   3626 
   3627 			if (r_p_element_array != NULL) {
   3628 				sal_free(r_p_element_array);
   3629 			}
   3630 
   3631 			if (BCM_FAILURE(r_rv)) {
   3632 				break;
   3633 			}
   3634 		}
   3635 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3636 	}
   3637 
   3638 	return r_rv;
   3639 }
   3640 
   3641 #endif	/* INCLUDE_PSTATS */
   3642 
   3643 int
   3644 bcm_client_range_traverse(
   3645 	int	unit,
   3646 	bcm_range_traverse_cb	callback,
   3647 	void *	user_data)
   3648 {
   3649 	bcm_rlink_traverse_data_t	r_req;
   3650 	int	r_rv;
   3651 	uint32	r_key[] = {
   3652 		0xa56156d3,0xdbb5a53b,0xfe4e2003,0xd821e6e4,0x98fc5a69 };
   3653 	bcm_range_config_t	r_range_cfg;
   3654 	bcm_range_config_t *	r_p_range_cfg;
   3655 
   3656 	sal_memset(&r_req, 0, sizeof(r_req));
   3657 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3658 	if (BCM_SUCCESS(r_rv)) {
   3659 		/* Pack request */
   3660 		/* Skip unit */
   3661 
   3662 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3663 			/* Unpack reply */
   3664 			/* Skip unit */
   3665 			if (*r_req.rx_ptr++ == 1) {
   3666 				r_p_range_cfg = NULL;
   3667 			} else {
   3668 				r_p_range_cfg = &r_range_cfg;
   3669 				r_req.rx_ptr = _bcm_unpack_range_config(r_req.rx_ptr, r_p_range_cfg);
   3670 			}
   3671 
   3672 			r_rv = callback(unit, r_p_range_cfg, user_data);
   3673 
   3674 			if (BCM_FAILURE(r_rv)) {
   3675 				break;
   3676 			}
   3677 		}
   3678 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3679 	}
   3680 
   3681 	return r_rv;
   3682 }
   3683 
   3684 #ifdef	INCLUDE_REGEX
   3685 
   3686 int
   3687 bcm_client_regex_session_traverse(
   3688 	int	unit,
   3689 	int	flags,
   3690 	bcm_regex_session_traverse_cb	cb,
   3691 	void *	user_data)
   3692 {
   3693 	bcm_rlink_traverse_data_t	r_req;
   3694 	int	r_rv;
   3695 	uint32	r_key[] = {
   3696 		0x97881531,0x3f638671,0x091072ca,0x638d7506,0xa71444d4 };
   3697 	bcm_regex_session_key_t	r_session_key;
   3698 	bcm_regex_session_t	r_session_data;
   3699 	bcm_regex_session_key_t *	r_p_session_key;
   3700 	bcm_regex_session_t *	r_p_session_data;
   3701 
   3702 	sal_memset(&r_req, 0, sizeof(r_req));
   3703 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3704 	if (BCM_SUCCESS(r_rv)) {
   3705 		/* Pack request */
   3706 		/* Skip unit */
   3707 		BCM_PACK_U32(r_req.tx_ptr, flags);
   3708 
   3709 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3710 			/* Unpack reply */
   3711 			/* Skip unit */
   3712 			if (*r_req.rx_ptr++ == 1) {
   3713 				r_p_session_key = NULL;
   3714 			} else {
   3715 				r_p_session_key = &r_session_key;
   3716 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_key->flags);
   3717 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_key->sip);
   3718 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_key->dip);
   3719 				r_req.rx_ptr = _bcm_unpack_ip6(r_req.rx_ptr, (*r_p_session_key).sip6);
   3720 				r_req.rx_ptr = _bcm_unpack_ip6(r_req.rx_ptr, (*r_p_session_key).dip6);
   3721 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_key->dst_port);
   3722 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_key->src_port);
   3723 				BCM_UNPACK_U8(r_req.rx_ptr, r_p_session_key->protocol);
   3724 			}
   3725 			if (*r_req.rx_ptr++ == 1) {
   3726 				r_p_session_data = NULL;
   3727 			} else {
   3728 				r_p_session_data = &r_session_data;
   3729 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_data->flags);
   3730 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_data->policy);
   3731 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_data->inactivity_timeout);
   3732 				BCM_UNPACK_U32(r_req.rx_ptr, r_p_session_data->timestamp);
   3733 			}
   3734 
   3735 			r_rv = cb(unit, r_p_session_key, r_p_session_data, user_data);
   3736 
   3737 			if (BCM_FAILURE(r_rv)) {
   3738 				break;
   3739 			}
   3740 		}
   3741 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3742 	}
   3743 
   3744 	return r_rv;
   3745 }
   3746 
   3747 #endif	/* INCLUDE_REGEX */
   3748 
   3749 int
   3750 bcm_client_sat_ctf_traverse(
   3751 	int	unit,
   3752 	bcm_sat_ctf_traverse_cb	cb,
   3753 	void *	user_data)
   3754 {
   3755 	bcm_rlink_traverse_data_t	r_req;
   3756 	int	r_rv;
   3757 	uint32	r_key[] = {
   3758 		0xe34b222d,0x1face4cc,0x3db24490,0x4bba330f,0xff39899d };
   3759 	bcm_sat_ctf_t	r_ctf_id;
   3760 
   3761 	sal_memset(&r_req, 0, sizeof(r_req));
   3762 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3763 	if (BCM_SUCCESS(r_rv)) {
   3764 		/* Pack request */
   3765 		/* Skip unit */
   3766 
   3767 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3768 			/* Unpack reply */
   3769 			/* Skip unit */
   3770 			BCM_UNPACK_U32(r_req.rx_ptr, r_ctf_id);
   3771 
   3772 			r_rv = cb(unit, r_ctf_id, user_data);
   3773 
   3774 			if (BCM_FAILURE(r_rv)) {
   3775 				break;
   3776 			}
   3777 		}
   3778 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3779 	}
   3780 
   3781 	return r_rv;
   3782 }
   3783 
   3784 int
   3785 bcm_client_sat_endpoint_traverse(
   3786 	int	unit,
   3787 	uint32	flags,
   3788 	bcm_sat_endpoint_traverse_cb	cb,
   3789 	void *	user_data)
   3790 {
   3791 	bcm_rlink_traverse_data_t	r_req;
   3792 	int	r_rv;
   3793 	uint32	r_key[] = {
   3794 		0xb59cc366,0xe824ff05,0xe18f2431,0xb51aeeaf,0xc0300b33 };
   3795 	bcm_sat_endpoint_info_t	r_endpoint_info;
   3796 	bcm_sat_endpoint_info_t *	r_p_endpoint_info;
   3797 
   3798 	sal_memset(&r_req, 0, sizeof(r_req));
   3799 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3800 	if (BCM_SUCCESS(r_rv)) {
   3801 		/* Pack request */
   3802 		/* Skip unit */
   3803 		BCM_PACK_U32(r_req.tx_ptr, flags);
   3804 
   3805 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3806 			/* Unpack reply */
   3807 			/* Skip unit */
   3808 			if (*r_req.rx_ptr++ == 1) {
   3809 				r_p_endpoint_info = NULL;
   3810 			} else {
   3811 				r_p_endpoint_info = &r_endpoint_info;
   3812 				r_req.rx_ptr = _bcm_unpack_sat_endpoint_info(r_req.rx_ptr, r_p_endpoint_info);
   3813 			}
   3814 
   3815 			r_rv = cb(unit, r_p_endpoint_info, user_data);
   3816 
   3817 			if (BCM_FAILURE(r_rv)) {
   3818 				break;
   3819 			}
   3820 		}
   3821 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3822 	}
   3823 
   3824 	return r_rv;
   3825 }
   3826 
   3827 int
   3828 bcm_client_sat_gtf_traverse(
   3829 	int	unit,
   3830 	bcm_sat_gtf_traverse_cb	cb,
   3831 	void *	user_data)
   3832 {
   3833 	bcm_rlink_traverse_data_t	r_req;
   3834 	int	r_rv;
   3835 	uint32	r_key[] = {
   3836 		0x39c117c2,0x6bf312a0,0xacf86abd,0x666c2f12,0x5044bbb8 };
   3837 	bcm_sat_gtf_t	r_gtf_id;
   3838 
   3839 	sal_memset(&r_req, 0, sizeof(r_req));
   3840 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3841 	if (BCM_SUCCESS(r_rv)) {
   3842 		/* Pack request */
   3843 		/* Skip unit */
   3844 
   3845 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3846 			/* Unpack reply */
   3847 			/* Skip unit */
   3848 			BCM_UNPACK_U32(r_req.rx_ptr, r_gtf_id);
   3849 
   3850 			r_rv = cb(unit, r_gtf_id, user_data);
   3851 
   3852 			if (BCM_FAILURE(r_rv)) {
   3853 				break;
   3854 			}
   3855 		}
   3856 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3857 	}
   3858 
   3859 	return r_rv;
   3860 }
   3861 
   3862 int
   3863 bcm_client_srv6_sid_initiator_traverse(
   3864 	int	unit,
   3865 	bcm_srv6_sid_initiator_traverse_info_t	additional_info,
   3866 	bcm_srv6_sid_initiator_traverse_cb	cb,
   3867 	void *	user_data)
   3868 {
   3869 	bcm_rlink_traverse_data_t	r_req;
   3870 	int	r_rv;
   3871 	uint32	r_key[] = {
   3872 		0xc038f065,0x286397f6,0x1f0e0f9f,0x14fa6f62,0x9a03a75f };
   3873 	bcm_srv6_sid_initiator_info_t	r_info;
   3874 	bcm_srv6_sid_initiator_info_t *	r_p_info;
   3875 
   3876 	sal_memset(&r_req, 0, sizeof(r_req));
   3877 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3878 	if (BCM_SUCCESS(r_rv)) {
   3879 		/* Pack request */
   3880 		/* Skip unit */
   3881 		BCM_PACK_U32(r_req.tx_ptr, additional_info.flags);
   3882 		BCM_PACK_U32(r_req.tx_ptr, additional_info.traverse_flags);
   3883 
   3884 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3885 			/* Unpack reply */
   3886 			/* Skip unit */
   3887 			if (*r_req.rx_ptr++ == 1) {
   3888 				r_p_info = NULL;
   3889 			} else {
   3890 				r_p_info = &r_info;
   3891 				r_req.rx_ptr = _bcm_unpack_srv6_sid_initiator_info(r_req.rx_ptr, r_p_info);
   3892 			}
   3893 
   3894 			r_rv = cb(unit, r_p_info, user_data);
   3895 
   3896 			if (BCM_FAILURE(r_rv)) {
   3897 				break;
   3898 			}
   3899 		}
   3900 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3901 	}
   3902 
   3903 	return r_rv;
   3904 }
   3905 
   3906 int
   3907 bcm_client_srv6_srh_base_initiator_traverse(
   3908 	int	unit,
   3909 	bcm_srv6_srh_base_initiator_traverse_info_t	additional_info,
   3910 	bcm_srv6_srh_base_initiator_traverse_cb	cb,
   3911 	void *	user_data)
   3912 {
   3913 	bcm_rlink_traverse_data_t	r_req;
   3914 	int	r_rv;
   3915 	uint32	r_key[] = {
   3916 		0x69fc19ed,0x68010f28,0x70232e07,0x2eeeabff,0xa011f87a };
   3917 	bcm_srv6_srh_base_initiator_info_t	r_info;
   3918 	bcm_srv6_srh_base_initiator_info_t *	r_p_info;
   3919 
   3920 	sal_memset(&r_req, 0, sizeof(r_req));
   3921 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3922 	if (BCM_SUCCESS(r_rv)) {
   3923 		/* Pack request */
   3924 		/* Skip unit */
   3925 		BCM_PACK_U32(r_req.tx_ptr, additional_info.flags);
   3926 		BCM_PACK_U32(r_req.tx_ptr, additional_info.traverse_flags);
   3927 
   3928 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3929 			/* Unpack reply */
   3930 			/* Skip unit */
   3931 			if (*r_req.rx_ptr++ == 1) {
   3932 				r_p_info = NULL;
   3933 			} else {
   3934 				r_p_info = &r_info;
   3935 				r_req.rx_ptr = _bcm_unpack_srv6_srh_base_initiator_info(r_req.rx_ptr, r_p_info);
   3936 			}
   3937 
   3938 			r_rv = cb(unit, r_p_info, user_data);
   3939 
   3940 			if (BCM_FAILURE(r_rv)) {
   3941 				break;
   3942 			}
   3943 		}
   3944 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3945 	}
   3946 
   3947 	return r_rv;
   3948 }
   3949 
   3950 int
   3951 bcm_client_srv6_terminator_next_protocol_traverse(
   3952 	int	unit,
   3953 	bcm_srv6_terminator_next_protocol_traverse_info_t	additional_info,
   3954 	bcm_srv6_terminator_next_protocol_traverse_cb	cb,
   3955 	void *	user_data)
   3956 {
   3957 	bcm_rlink_traverse_data_t	r_req;
   3958 	int	r_rv;
   3959 	uint32	r_key[] = {
   3960 		0xe76f5992,0xa18b68ba,0xb5525608,0xd7662cc2,0xaab28c2f };
   3961 	bcm_srv6_terminator_next_protocol_mapping_t	r_info;
   3962 	bcm_srv6_terminator_next_protocol_mapping_t *	r_p_info;
   3963 
   3964 	sal_memset(&r_req, 0, sizeof(r_req));
   3965 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   3966 	if (BCM_SUCCESS(r_rv)) {
   3967 		/* Pack request */
   3968 		/* Skip unit */
   3969 		BCM_PACK_U32(r_req.tx_ptr, additional_info.flags);
   3970 		BCM_PACK_U32(r_req.tx_ptr, additional_info.traverse_flags);
   3971 
   3972 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   3973 			/* Unpack reply */
   3974 			/* Skip unit */
   3975 			if (*r_req.rx_ptr++ == 1) {
   3976 				r_p_info = NULL;
   3977 			} else {
   3978 				r_p_info = &r_info;
   3979 				r_req.rx_ptr = _bcm_unpack_srv6_terminator_next_protocol_mapping(r_req.rx_ptr, r_p_info);
   3980 			}
   3981 
   3982 			r_rv = cb(unit, r_p_info, user_data);
   3983 
   3984 			if (BCM_FAILURE(r_rv)) {
   3985 				break;
   3986 			}
   3987 		}
   3988 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   3989 	}
   3990 
   3991 	return r_rv;
   3992 }
   3993 
   3994 int
   3995 bcm_client_subport_group_traverse(
   3996 	int	unit,
   3997 	bcm_gport_t	subport_group,
   3998 	bcm_subport_port_traverse_cb	cb,
   3999 	void *	user_data)
   4000 {
   4001 	bcm_rlink_traverse_data_t	r_req;
   4002 	int	r_rv;
   4003 	uint32	r_key[] = {
   4004 		0xb50c8de4,0x0eedad4b,0x4f656714,0x62ed3ed6,0xecbc999a };
   4005 	bcm_gport_t	r_port;
   4006 	bcm_subport_config_t	r_config;
   4007 	bcm_subport_config_t *	r_p_config;
   4008 
   4009 	sal_memset(&r_req, 0, sizeof(r_req));
   4010 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4011 	if (BCM_SUCCESS(r_rv)) {
   4012 		/* Pack request */
   4013 		/* Skip unit */
   4014 		BCM_PACK_U32(r_req.tx_ptr, subport_group);
   4015 
   4016 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4017 			/* Unpack reply */
   4018 			/* Skip unit */
   4019 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   4020 			if (*r_req.rx_ptr++ == 1) {
   4021 				r_p_config = NULL;
   4022 			} else {
   4023 				r_p_config = &r_config;
   4024 				r_req.rx_ptr = _bcm_unpack_subport_config(r_req.rx_ptr, r_p_config);
   4025 			}
   4026 
   4027 			r_rv = cb(unit, r_port, r_p_config, user_data);
   4028 
   4029 			if (BCM_FAILURE(r_rv)) {
   4030 				break;
   4031 			}
   4032 		}
   4033 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4034 	}
   4035 
   4036 	return r_rv;
   4037 }
   4038 
   4039 int
   4040 bcm_client_subport_port_traverse(
   4041 	int	unit,
   4042 	bcm_subport_port_traverse_cb	cb,
   4043 	void *	user_data)
   4044 {
   4045 	bcm_rlink_traverse_data_t	r_req;
   4046 	int	r_rv;
   4047 	uint32	r_key[] = {
   4048 		0x36115c4e,0x15b39040,0xea52c661,0x326f8213,0x13b775b1 };
   4049 	bcm_gport_t	r_port;
   4050 	bcm_subport_config_t	r_config;
   4051 	bcm_subport_config_t *	r_p_config;
   4052 
   4053 	sal_memset(&r_req, 0, sizeof(r_req));
   4054 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4055 	if (BCM_SUCCESS(r_rv)) {
   4056 		/* Pack request */
   4057 		/* Skip unit */
   4058 
   4059 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4060 			/* Unpack reply */
   4061 			/* Skip unit */
   4062 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   4063 			if (*r_req.rx_ptr++ == 1) {
   4064 				r_p_config = NULL;
   4065 			} else {
   4066 				r_p_config = &r_config;
   4067 				r_req.rx_ptr = _bcm_unpack_subport_config(r_req.rx_ptr, r_p_config);
   4068 			}
   4069 
   4070 			r_rv = cb(unit, r_port, r_p_config, user_data);
   4071 
   4072 			if (BCM_FAILURE(r_rv)) {
   4073 				break;
   4074 			}
   4075 		}
   4076 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4077 	}
   4078 
   4079 	return r_rv;
   4080 }
   4081 
   4082 int
   4083 bcm_client_switch_agm_traverse(
   4084 	int	unit,
   4085 	int	flags,
   4086 	bcm_switch_agm_traverse_cb	trav_fn,
   4087 	void *	user_data)
   4088 {
   4089 	bcm_rlink_traverse_data_t	r_req;
   4090 	int	r_rv;
   4091 	uint32	r_key[] = {
   4092 		0x6f855f85,0xc253d521,0x5ff55969,0x292ea278,0x2eaf6d1a };
   4093 	bcm_switch_agm_info_t	r_agm_info;
   4094 	bcm_switch_agm_info_t *	r_p_agm_info;
   4095 
   4096 	sal_memset(&r_req, 0, sizeof(r_req));
   4097 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4098 	if (BCM_SUCCESS(r_rv)) {
   4099 		/* Pack request */
   4100 		/* Skip unit */
   4101 		BCM_PACK_U32(r_req.tx_ptr, flags);
   4102 
   4103 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4104 			/* Unpack reply */
   4105 			/* Skip unit */
   4106 			if (*r_req.rx_ptr++ == 1) {
   4107 				r_p_agm_info = NULL;
   4108 			} else {
   4109 				r_p_agm_info = &r_agm_info;
   4110 				r_req.rx_ptr = _bcm_unpack_switch_agm_info(r_req.rx_ptr, r_p_agm_info);
   4111 			}
   4112 
   4113 			r_rv = trav_fn(unit, r_p_agm_info, user_data);
   4114 
   4115 			if (BCM_FAILURE(r_rv)) {
   4116 				break;
   4117 			}
   4118 		}
   4119 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4120 	}
   4121 
   4122 	return r_rv;
   4123 }
   4124 
   4125 int
   4126 bcm_client_switch_encap_traverse(
   4127 	int	unit,
   4128 	bcm_switch_encap_traverse_cb	cb_fn,
   4129 	void *	user_data)
   4130 {
   4131 	bcm_rlink_traverse_data_t	r_req;
   4132 	int	r_rv;
   4133 	uint32	r_key[] = {
   4134 		0xfe921663,0x6c99629c,0x9a58724c,0x95e40429,0xd6a94df4 };
   4135 	bcm_if_t	r_encap_id;
   4136 	bcm_switch_encap_info_t	r_encap_info;
   4137 	bcm_switch_encap_info_t *	r_p_encap_info;
   4138 
   4139 	sal_memset(&r_req, 0, sizeof(r_req));
   4140 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4141 	if (BCM_SUCCESS(r_rv)) {
   4142 		/* Pack request */
   4143 		/* Skip unit */
   4144 
   4145 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4146 			/* Unpack reply */
   4147 			/* Skip unit */
   4148 			BCM_UNPACK_U32(r_req.rx_ptr, r_encap_id);
   4149 			if (*r_req.rx_ptr++ == 1) {
   4150 				r_p_encap_info = NULL;
   4151 			} else {
   4152 				r_p_encap_info = &r_encap_info;
   4153 				r_req.rx_ptr = _bcm_unpack_switch_encap_info(r_req.rx_ptr, r_p_encap_info);
   4154 			}
   4155 
   4156 			r_rv = cb_fn(unit, r_encap_id, r_p_encap_info, user_data);
   4157 
   4158 			if (BCM_FAILURE(r_rv)) {
   4159 				break;
   4160 			}
   4161 		}
   4162 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4163 	}
   4164 
   4165 	return r_rv;
   4166 }
   4167 
   4168 int
   4169 bcm_client_switch_hash_entry_traverse(
   4170 	int	unit,
   4171 	int	flags,
   4172 	bcm_switch_hash_entry_traverse_cb	cb_fn,
   4173 	void *	user_data)
   4174 {
   4175 	bcm_rlink_traverse_data_t	r_req;
   4176 	int	r_rv;
   4177 	uint32	r_key[] = {
   4178 		0x24111cc8,0x7879b2b9,0x05585e2b,0x1611ffa2,0x92bdc4f3 };
   4179 	int	r_flags;
   4180 	bcm_hash_entry_t	r_entry;
   4181 
   4182 	sal_memset(&r_req, 0, sizeof(r_req));
   4183 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4184 	if (BCM_SUCCESS(r_rv)) {
   4185 		/* Pack request */
   4186 		/* Skip unit */
   4187 		BCM_PACK_U32(r_req.tx_ptr, flags);
   4188 
   4189 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4190 			/* Unpack reply */
   4191 			/* Skip unit */
   4192 			BCM_UNPACK_U32(r_req.rx_ptr, r_flags);
   4193 			BCM_UNPACK_U32(r_req.rx_ptr, r_entry);
   4194 
   4195 			r_rv = cb_fn(unit, r_flags, r_entry, user_data);
   4196 
   4197 			if (BCM_FAILURE(r_rv)) {
   4198 				break;
   4199 			}
   4200 		}
   4201 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4202 	}
   4203 
   4204 	return r_rv;
   4205 }
   4206 
   4207 int
   4208 bcm_client_switch_match_config_traverse(
   4209 	int	unit,
   4210 	bcm_switch_match_service_t	match_service,
   4211 	bcm_switch_match_config_traverse_cb	cb_fn,
   4212 	void *	user_data)
   4213 {
   4214 	bcm_rlink_traverse_data_t	r_req;
   4215 	int	r_rv;
   4216 	uint32	r_key[] = {
   4217 		0x54c718ae,0xf3af5ae9,0x5704faf4,0xc93439fc,0xfb810d3c };
   4218 	int	r_match_id;
   4219 	bcm_switch_match_config_info_t	r_config_info;
   4220 	bcm_switch_match_config_info_t *	r_p_config_info;
   4221 
   4222 	sal_memset(&r_req, 0, sizeof(r_req));
   4223 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4224 	if (BCM_SUCCESS(r_rv)) {
   4225 		/* Pack request */
   4226 		/* Skip unit */
   4227 		BCM_PACK_U32(r_req.tx_ptr, match_service);
   4228 
   4229 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4230 			/* Unpack reply */
   4231 			/* Skip unit */
   4232 			BCM_UNPACK_U32(r_req.rx_ptr, r_match_id);
   4233 			if (*r_req.rx_ptr++ == 1) {
   4234 				r_p_config_info = NULL;
   4235 			} else {
   4236 				r_p_config_info = &r_config_info;
   4237 				r_req.rx_ptr = _bcm_unpack_switch_match_config_info(r_req.rx_ptr, r_p_config_info);
   4238 			}
   4239 
   4240 			r_rv = cb_fn(unit, r_match_id, r_p_config_info, user_data);
   4241 
   4242 			if (BCM_FAILURE(r_rv)) {
   4243 				break;
   4244 			}
   4245 		}
   4246 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4247 	}
   4248 
   4249 	return r_rv;
   4250 }
   4251 
   4252 int
   4253 bcm_client_switch_match_control_traverse(
   4254 	int	unit,
   4255 	bcm_switch_match_service_t	match_service,
   4256 	bcm_switch_match_control_traverse_cb	cb_fn,
   4257 	void *	user_data)
   4258 {
   4259 	bcm_rlink_traverse_data_t	r_req;
   4260 	int	r_rv;
   4261 	uint32	r_key[] = {
   4262 		0x80bebbc6,0xcb5a54a4,0x2bc78daf,0x113e0d8a,0xd27d16de };
   4263 	bcm_switch_match_control_type_t	r_control_type;
   4264 	bcm_gport_t	r_gport;
   4265 	bcm_switch_match_control_info_t	r_control_info;
   4266 	bcm_switch_match_control_info_t *	r_p_control_info;
   4267 
   4268 	sal_memset(&r_req, 0, sizeof(r_req));
   4269 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4270 	if (BCM_SUCCESS(r_rv)) {
   4271 		/* Pack request */
   4272 		/* Skip unit */
   4273 		BCM_PACK_U32(r_req.tx_ptr, match_service);
   4274 
   4275 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4276 			/* Unpack reply */
   4277 			/* Skip unit */
   4278 			BCM_UNPACK_U32(r_req.rx_ptr, r_control_type);
   4279 			BCM_UNPACK_U32(r_req.rx_ptr, r_gport);
   4280 			if (*r_req.rx_ptr++ == 1) {
   4281 				r_p_control_info = NULL;
   4282 			} else {
   4283 				r_p_control_info = &r_control_info;
   4284 				r_req.rx_ptr = _bcm_unpack_switch_match_control_info(r_req.rx_ptr, r_p_control_info);
   4285 			}
   4286 
   4287 			r_rv = cb_fn(unit, r_control_type, r_gport, r_p_control_info, user_data);
   4288 
   4289 			if (BCM_FAILURE(r_rv)) {
   4290 				break;
   4291 			}
   4292 		}
   4293 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4294 	}
   4295 
   4296 	return r_rv;
   4297 }
   4298 
   4299 int
   4300 bcm_client_switch_olp_l2_addr_traverse(
   4301 	int	unit,
   4302 	bcm_switch_olp_l2_addr_traverse_cb	cb_fn,
   4303 	void *	user_data)
   4304 {
   4305 	bcm_rlink_traverse_data_t	r_req;
   4306 	int	r_rv;
   4307 	uint32	r_key[] = {
   4308 		0x1f2a7e12,0x01c0b8f5,0x95eb51d6,0x1fa69a8e,0x1c53704a };
   4309 	bcm_switch_olp_l2_addr_t	r_l2_addr;
   4310 	bcm_switch_olp_l2_addr_t *	r_p_l2_addr;
   4311 
   4312 	sal_memset(&r_req, 0, sizeof(r_req));
   4313 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4314 	if (BCM_SUCCESS(r_rv)) {
   4315 		/* Pack request */
   4316 		/* Skip unit */
   4317 
   4318 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4319 			/* Unpack reply */
   4320 			/* Skip unit */
   4321 			if (*r_req.rx_ptr++ == 1) {
   4322 				r_p_l2_addr = NULL;
   4323 			} else {
   4324 				r_p_l2_addr = &r_l2_addr;
   4325 				r_req.rx_ptr = _bcm_unpack_switch_olp_l2_addr(r_req.rx_ptr, r_p_l2_addr);
   4326 			}
   4327 
   4328 			r_rv = cb_fn(unit, r_p_l2_addr, user_data);
   4329 
   4330 			if (BCM_FAILURE(r_rv)) {
   4331 				break;
   4332 			}
   4333 		}
   4334 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4335 	}
   4336 
   4337 	return r_rv;
   4338 }
   4339 
   4340 int
   4341 bcm_client_time_interface_traverse(
   4342 	int	unit,
   4343 	bcm_time_interface_traverse_cb	cb,
   4344 	void *	user_data)
   4345 {
   4346 	bcm_rlink_traverse_data_t	r_req;
   4347 	int	r_rv;
   4348 	uint32	r_key[] = {
   4349 		0xb7e7bce3,0xf36ec46a,0x4b1c9ac0,0x8c196613,0x6f327905 };
   4350 	bcm_time_interface_t	r_intf;
   4351 	bcm_time_interface_t *	r_p_intf;
   4352 
   4353 	sal_memset(&r_req, 0, sizeof(r_req));
   4354 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4355 	if (BCM_SUCCESS(r_rv)) {
   4356 		/* Pack request */
   4357 		/* Skip unit */
   4358 
   4359 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4360 			/* Unpack reply */
   4361 			/* Skip unit */
   4362 			if (*r_req.rx_ptr++ == 1) {
   4363 				r_p_intf = NULL;
   4364 			} else {
   4365 				r_p_intf = &r_intf;
   4366 				r_req.rx_ptr = _bcm_unpack_time_interface(r_req.rx_ptr, r_p_intf);
   4367 			}
   4368 
   4369 			r_rv = cb(unit, r_p_intf, user_data);
   4370 
   4371 			if (BCM_FAILURE(r_rv)) {
   4372 				break;
   4373 			}
   4374 		}
   4375 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4376 	}
   4377 
   4378 	return r_rv;
   4379 }
   4380 
   4381 #ifdef	INCLUDE_L3
   4382 
   4383 int
   4384 bcm_client_trill_multicast_adjacency_traverse(
   4385 	int	unit,
   4386 	bcm_trill_multicast_adjacency_traverse_cb	cb,
   4387 	void *	user_data)
   4388 {
   4389 	bcm_rlink_traverse_data_t	r_req;
   4390 	int	r_rv;
   4391 	uint32	r_key[] = {
   4392 		0x0ac4451b,0x1b679cf5,0xc07134b4,0xf9190f9a,0x404d3762 };
   4393 	bcm_trill_multicast_adjacency_t	r_info;
   4394 	bcm_trill_multicast_adjacency_t *	r_p_info;
   4395 
   4396 	sal_memset(&r_req, 0, sizeof(r_req));
   4397 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4398 	if (BCM_SUCCESS(r_rv)) {
   4399 		/* Pack request */
   4400 		/* Skip unit */
   4401 
   4402 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4403 			/* Unpack reply */
   4404 			/* Skip unit */
   4405 			if (*r_req.rx_ptr++ == 1) {
   4406 				r_p_info = NULL;
   4407 			} else {
   4408 				r_p_info = &r_info;
   4409 				r_req.rx_ptr = _bcm_unpack_trill_multicast_adjacency(r_req.rx_ptr, r_p_info);
   4410 			}
   4411 
   4412 			r_rv = cb(unit, r_p_info, user_data);
   4413 
   4414 			if (BCM_FAILURE(r_rv)) {
   4415 				break;
   4416 			}
   4417 		}
   4418 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4419 	}
   4420 
   4421 	return r_rv;
   4422 }
   4423 
   4424 int
   4425 bcm_client_trill_multicast_entry_traverse(
   4426 	int	unit,
   4427 	bcm_trill_multicast_entry_traverse_cb	cb,
   4428 	void *	user_data)
   4429 {
   4430 	bcm_rlink_traverse_data_t	r_req;
   4431 	int	r_rv;
   4432 	uint32	r_key[] = {
   4433 		0x69e11ce7,0x630dfe6f,0x2da8206d,0x0a0a6755,0x3b399ed8 };
   4434 	bcm_trill_multicast_entry_t	r_trill_mc_entry;
   4435 	bcm_trill_multicast_entry_t *	r_p_trill_mc_entry;
   4436 
   4437 	sal_memset(&r_req, 0, sizeof(r_req));
   4438 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4439 	if (BCM_SUCCESS(r_rv)) {
   4440 		/* Pack request */
   4441 		/* Skip unit */
   4442 
   4443 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4444 			/* Unpack reply */
   4445 			/* Skip unit */
   4446 			if (*r_req.rx_ptr++ == 1) {
   4447 				r_p_trill_mc_entry = NULL;
   4448 			} else {
   4449 				r_p_trill_mc_entry = &r_trill_mc_entry;
   4450 				r_req.rx_ptr = _bcm_unpack_trill_multicast_entry(r_req.rx_ptr, r_p_trill_mc_entry);
   4451 			}
   4452 
   4453 			r_rv = cb(unit, r_p_trill_mc_entry, user_data);
   4454 
   4455 			if (BCM_FAILURE(r_rv)) {
   4456 				break;
   4457 			}
   4458 		}
   4459 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4460 	}
   4461 
   4462 	return r_rv;
   4463 }
   4464 
   4465 int
   4466 bcm_client_trill_multicast_source_traverse(
   4467 	int	unit,
   4468 	bcm_trill_multicast_source_traverse_cb	cb,
   4469 	void *	user_data)
   4470 {
   4471 	bcm_rlink_traverse_data_t	r_req;
   4472 	int	r_rv;
   4473 	uint32	r_key[] = {
   4474 		0x08f576a7,0x7bddad71,0xdc08b493,0x2359ce15,0x9ba1b582 };
   4475 	bcm_trill_name_t	r_root_name;
   4476 	bcm_trill_name_t	r_source_rbridge_name;
   4477 	bcm_gport_t	r_port;
   4478 
   4479 	sal_memset(&r_req, 0, sizeof(r_req));
   4480 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4481 	if (BCM_SUCCESS(r_rv)) {
   4482 		/* Pack request */
   4483 		/* Skip unit */
   4484 
   4485 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4486 			/* Unpack reply */
   4487 			/* Skip unit */
   4488 			BCM_UNPACK_U32(r_req.rx_ptr, r_root_name);
   4489 			BCM_UNPACK_U32(r_req.rx_ptr, r_source_rbridge_name);
   4490 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   4491 
   4492 			r_rv = cb(unit, r_root_name, r_source_rbridge_name, r_port, user_data);
   4493 
   4494 			if (BCM_FAILURE(r_rv)) {
   4495 				break;
   4496 			}
   4497 		}
   4498 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4499 	}
   4500 
   4501 	return r_rv;
   4502 }
   4503 
   4504 int
   4505 bcm_client_trill_vpn_traverse(
   4506 	int	unit,
   4507 	bcm_trill_vpn_traverse_cb	cb,
   4508 	void *	user_data)
   4509 {
   4510 	bcm_rlink_traverse_data_t	r_req;
   4511 	int	r_rv;
   4512 	uint32	r_key[] = {
   4513 		0xef0ba6f2,0x2f1be987,0xd6790ddb,0xc641032e,0x477b06a0 };
   4514 	bcm_trill_vpn_config_t	r_info;
   4515 	bcm_trill_vpn_config_t *	r_p_info;
   4516 
   4517 	sal_memset(&r_req, 0, sizeof(r_req));
   4518 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4519 	if (BCM_SUCCESS(r_rv)) {
   4520 		/* Pack request */
   4521 		/* Skip unit */
   4522 
   4523 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4524 			/* Unpack reply */
   4525 			/* Skip unit */
   4526 			if (*r_req.rx_ptr++ == 1) {
   4527 				r_p_info = NULL;
   4528 			} else {
   4529 				r_p_info = &r_info;
   4530 				r_req.rx_ptr = _bcm_unpack_trill_vpn_config(r_req.rx_ptr, r_p_info);
   4531 			}
   4532 
   4533 			r_rv = cb(unit, r_p_info, user_data);
   4534 
   4535 			if (BCM_FAILURE(r_rv)) {
   4536 				break;
   4537 			}
   4538 		}
   4539 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4540 	}
   4541 
   4542 	return r_rv;
   4543 }
   4544 
   4545 #endif	/* INCLUDE_L3 */
   4546 
   4547 int
   4548 bcm_client_trunk_resilient_traverse(
   4549 	int	unit,
   4550 	uint32	flags,
   4551 	bcm_trunk_resilient_entry_t *	match_entry,
   4552 	bcm_trunk_resilient_traverse_cb	trav_fn,
   4553 	void *	user_data)
   4554 {
   4555 	bcm_rlink_traverse_data_t	r_req;
   4556 	int	r_rv;
   4557 	uint32	r_key[] = {
   4558 		0x4318345d,0xb11fb2ee,0xbbb9d365,0x1654c88a,0x81e3f8b0 };
   4559 	bcm_trunk_resilient_entry_t	r_entry;
   4560 	bcm_trunk_resilient_entry_t *	r_p_entry;
   4561 
   4562 	sal_memset(&r_req, 0, sizeof(r_req));
   4563 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4564 	if (BCM_SUCCESS(r_rv)) {
   4565 		/* Pack request */
   4566 		/* Skip unit */
   4567 		BCM_PACK_U32(r_req.tx_ptr, flags);
   4568 		if (match_entry == NULL) {
   4569 			BCM_PACK_U8(r_req.tx_ptr, 1);
   4570 		} else {
   4571 			BCM_PACK_U8(r_req.tx_ptr, 0);
   4572 			r_req.tx_ptr = _bcm_pack_trunk_resilient_entry(r_req.tx_ptr, match_entry);
   4573 		}
   4574 
   4575 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4576 			/* Unpack reply */
   4577 			/* Skip unit */
   4578 			if (*r_req.rx_ptr++ == 1) {
   4579 				r_p_entry = NULL;
   4580 			} else {
   4581 				r_p_entry = &r_entry;
   4582 				r_req.rx_ptr = _bcm_unpack_trunk_resilient_entry(r_req.rx_ptr, r_p_entry);
   4583 			}
   4584 
   4585 			r_rv = trav_fn(unit, r_p_entry, user_data);
   4586 
   4587 			if (BCM_FAILURE(r_rv)) {
   4588 				break;
   4589 			}
   4590 		}
   4591 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4592 	}
   4593 
   4594 	return r_rv;
   4595 }
   4596 
   4597 int
   4598 bcm_client_tsn_flowset_traverse(
   4599 	int	unit,
   4600 	bcm_tsn_flowset_traverse_cb	cb,
   4601 	void *	user_data)
   4602 {
   4603 	bcm_rlink_traverse_data_t	r_req;
   4604 	int	r_rv;
   4605 	uint32	r_key[] = {
   4606 		0x6a3fbfcb,0xaac26c81,0x912cc039,0xd1e3b258,0x1bbb6998 };
   4607 	bcm_tsn_flowset_t	r_flowset;
   4608 
   4609 	sal_memset(&r_req, 0, sizeof(r_req));
   4610 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4611 	if (BCM_SUCCESS(r_rv)) {
   4612 		/* Pack request */
   4613 		/* Skip unit */
   4614 
   4615 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4616 			/* Unpack reply */
   4617 			/* Skip unit */
   4618 			BCM_UNPACK_U32(r_req.rx_ptr, r_flowset);
   4619 
   4620 			r_rv = cb(unit, r_flowset, user_data);
   4621 
   4622 			if (BCM_FAILURE(r_rv)) {
   4623 				break;
   4624 			}
   4625 		}
   4626 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4627 	}
   4628 
   4629 	return r_rv;
   4630 }
   4631 
   4632 int
   4633 bcm_client_tsn_mtu_profile_traverse(
   4634 	int	unit,
   4635 	bcm_tsn_mtu_profile_traverse_cb	cb,
   4636 	void *	user_data)
   4637 {
   4638 	bcm_rlink_traverse_data_t	r_req;
   4639 	int	r_rv;
   4640 	uint32	r_key[] = {
   4641 		0x180b66f7,0xe9303243,0x081b9c56,0xb35e6163,0xb6ae99df };
   4642 	int	r_profile_id;
   4643 
   4644 	sal_memset(&r_req, 0, sizeof(r_req));
   4645 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4646 	if (BCM_SUCCESS(r_rv)) {
   4647 		/* Pack request */
   4648 		/* Skip unit */
   4649 
   4650 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4651 			/* Unpack reply */
   4652 			/* Skip unit */
   4653 			BCM_UNPACK_U32(r_req.rx_ptr, r_profile_id);
   4654 
   4655 			r_rv = cb(unit, r_profile_id, user_data);
   4656 
   4657 			if (BCM_FAILURE(r_rv)) {
   4658 				break;
   4659 			}
   4660 		}
   4661 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4662 	}
   4663 
   4664 	return r_rv;
   4665 }
   4666 
   4667 int
   4668 bcm_client_tsn_pri_map_traverse(
   4669 	int	unit,
   4670 	bcm_tsn_pri_map_traverse_cb	cb,
   4671 	void *	user_data)
   4672 {
   4673 	bcm_rlink_traverse_data_t	r_req;
   4674 	int	r_rv;
   4675 	uint32	r_key[] = {
   4676 		0x88111dac,0x1ce4379e,0x766185dc,0x29da72fa,0x0ca81746 };
   4677 	bcm_tsn_pri_map_t	r_map_id;
   4678 
   4679 	sal_memset(&r_req, 0, sizeof(r_req));
   4680 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4681 	if (BCM_SUCCESS(r_rv)) {
   4682 		/* Pack request */
   4683 		/* Skip unit */
   4684 
   4685 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4686 			/* Unpack reply */
   4687 			/* Skip unit */
   4688 			BCM_UNPACK_U32(r_req.rx_ptr, r_map_id);
   4689 
   4690 			r_rv = cb(unit, r_map_id, user_data);
   4691 
   4692 			if (BCM_FAILURE(r_rv)) {
   4693 				break;
   4694 			}
   4695 		}
   4696 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4697 	}
   4698 
   4699 	return r_rv;
   4700 }
   4701 
   4702 int
   4703 bcm_client_tsn_sr_auto_learn_group_traverse(
   4704 	int	unit,
   4705 	bcm_tsn_sr_auto_learn_group_traverse_cb	cb,
   4706 	void *	user_data)
   4707 {
   4708 	bcm_rlink_traverse_data_t	r_req;
   4709 	int	r_rv;
   4710 	uint32	r_key[] = {
   4711 		0x96580783,0xa3e28103,0x555bbfc9,0x7467e2d9,0x940e4740 };
   4712 	int	r_group_id;
   4713 
   4714 	sal_memset(&r_req, 0, sizeof(r_req));
   4715 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4716 	if (BCM_SUCCESS(r_rv)) {
   4717 		/* Pack request */
   4718 		/* Skip unit */
   4719 
   4720 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4721 			/* Unpack reply */
   4722 			/* Skip unit */
   4723 			BCM_UNPACK_U32(r_req.rx_ptr, r_group_id);
   4724 
   4725 			r_rv = cb(unit, r_group_id, user_data);
   4726 
   4727 			if (BCM_FAILURE(r_rv)) {
   4728 				break;
   4729 			}
   4730 		}
   4731 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4732 	}
   4733 
   4734 	return r_rv;
   4735 }
   4736 
   4737 int
   4738 bcm_client_tsn_sr_flowset_traverse(
   4739 	int	unit,
   4740 	int	is_rx,
   4741 	bcm_tsn_sr_flowset_traverse_cb	cb,
   4742 	void *	user_data)
   4743 {
   4744 	bcm_rlink_traverse_data_t	r_req;
   4745 	int	r_rv;
   4746 	uint32	r_key[] = {
   4747 		0x4f0ed9d0,0xcfb08fd5,0xeb8b186d,0x18747c5a,0xd8d03ebb };
   4748 	bcm_tsn_sr_flowset_t	r_flowset;
   4749 
   4750 	sal_memset(&r_req, 0, sizeof(r_req));
   4751 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4752 	if (BCM_SUCCESS(r_rv)) {
   4753 		/* Pack request */
   4754 		/* Skip unit */
   4755 		BCM_PACK_U32(r_req.tx_ptr, is_rx);
   4756 
   4757 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4758 			/* Unpack reply */
   4759 			/* Skip unit */
   4760 			BCM_UNPACK_U32(r_req.rx_ptr, r_flowset);
   4761 
   4762 			r_rv = cb(unit, r_flowset, user_data);
   4763 
   4764 			if (BCM_FAILURE(r_rv)) {
   4765 				break;
   4766 			}
   4767 		}
   4768 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4769 	}
   4770 
   4771 	return r_rv;
   4772 }
   4773 
   4774 int
   4775 bcm_client_tsn_stat_group_traverse(
   4776 	int	unit,
   4777 	bcm_tsn_stat_group_traverse_cb	cb,
   4778 	void *	user_data)
   4779 {
   4780 	bcm_rlink_traverse_data_t	r_req;
   4781 	int	r_rv;
   4782 	uint32	r_key[] = {
   4783 		0x6143b6b2,0xb17fc08a,0x6767beb2,0xf24d5859,0x290180ab };
   4784 	bcm_tsn_stat_group_t	r_id;
   4785 
   4786 	sal_memset(&r_req, 0, sizeof(r_req));
   4787 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4788 	if (BCM_SUCCESS(r_rv)) {
   4789 		/* Pack request */
   4790 		/* Skip unit */
   4791 
   4792 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4793 			/* Unpack reply */
   4794 			/* Skip unit */
   4795 			BCM_UNPACK_U32(r_req.rx_ptr, r_id);
   4796 
   4797 			r_rv = cb(unit, r_id, user_data);
   4798 
   4799 			if (BCM_FAILURE(r_rv)) {
   4800 				break;
   4801 			}
   4802 		}
   4803 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4804 	}
   4805 
   4806 	return r_rv;
   4807 }
   4808 
   4809 int
   4810 bcm_client_tsn_stu_profile_traverse(
   4811 	int	unit,
   4812 	bcm_tsn_stu_profile_traverse_cb	cb,
   4813 	void *	user_data)
   4814 {
   4815 	bcm_rlink_traverse_data_t	r_req;
   4816 	int	r_rv;
   4817 	uint32	r_key[] = {
   4818 		0x68c7882c,0xe66787f9,0xa4e9df2e,0xa8f2bbfd,0xa2ca63d0 };
   4819 	int	r_profile_id;
   4820 
   4821 	sal_memset(&r_req, 0, sizeof(r_req));
   4822 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4823 	if (BCM_SUCCESS(r_rv)) {
   4824 		/* Pack request */
   4825 		/* Skip unit */
   4826 
   4827 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4828 			/* Unpack reply */
   4829 			/* Skip unit */
   4830 			BCM_UNPACK_U32(r_req.rx_ptr, r_profile_id);
   4831 
   4832 			r_rv = cb(unit, r_profile_id, user_data);
   4833 
   4834 			if (BCM_FAILURE(r_rv)) {
   4835 				break;
   4836 			}
   4837 		}
   4838 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4839 	}
   4840 
   4841 	return r_rv;
   4842 }
   4843 
   4844 int
   4845 bcm_client_tsn_taf_cosq_mapping_profile_traverse(
   4846 	int	unit,
   4847 	bcm_tsn_taf_cosq_mapping_profile_traverse_cb	cb,
   4848 	void *	user_data)
   4849 {
   4850 	bcm_rlink_traverse_data_t	r_req;
   4851 	int	r_rv;
   4852 	uint32	r_key[] = {
   4853 		0xf63a1f4c,0x0d11b393,0x15cafbf8,0x26cecae7,0x1d2c0b99 };
   4854 	int	r_cosq_profile;
   4855 
   4856 	sal_memset(&r_req, 0, sizeof(r_req));
   4857 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4858 	if (BCM_SUCCESS(r_rv)) {
   4859 		/* Pack request */
   4860 		/* Skip unit */
   4861 
   4862 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4863 			/* Unpack reply */
   4864 			/* Skip unit */
   4865 			BCM_UNPACK_U32(r_req.rx_ptr, r_cosq_profile);
   4866 
   4867 			r_rv = cb(unit, r_cosq_profile, user_data);
   4868 
   4869 			if (BCM_FAILURE(r_rv)) {
   4870 				break;
   4871 			}
   4872 		}
   4873 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4874 	}
   4875 
   4876 	return r_rv;
   4877 }
   4878 
   4879 int
   4880 bcm_client_tsn_taf_gate_max_bytes_profile_traverse(
   4881 	int	unit,
   4882 	int	taf_gate_id,
   4883 	bcm_tsn_taf_gate_max_bytes_profile_traverse_cb	cb,
   4884 	void *	user_data)
   4885 {
   4886 	bcm_rlink_traverse_data_t	r_req;
   4887 	int	r_rv;
   4888 	uint32	r_key[] = {
   4889 		0x220804c1,0xe673abd3,0x2cb44f01,0x617481d8,0x3592bf92 };
   4890 	int	r_taf_gate_id;
   4891 	int	r_profile_id;
   4892 
   4893 	sal_memset(&r_req, 0, sizeof(r_req));
   4894 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4895 	if (BCM_SUCCESS(r_rv)) {
   4896 		/* Pack request */
   4897 		/* Skip unit */
   4898 		BCM_PACK_U32(r_req.tx_ptr, taf_gate_id);
   4899 
   4900 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4901 			/* Unpack reply */
   4902 			/* Skip unit */
   4903 			BCM_UNPACK_U32(r_req.rx_ptr, r_taf_gate_id);
   4904 			BCM_UNPACK_U32(r_req.rx_ptr, r_profile_id);
   4905 
   4906 			r_rv = cb(unit, r_taf_gate_id, r_profile_id, user_data);
   4907 
   4908 			if (BCM_FAILURE(r_rv)) {
   4909 				break;
   4910 			}
   4911 		}
   4912 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4913 	}
   4914 
   4915 	return r_rv;
   4916 }
   4917 
   4918 int
   4919 bcm_client_tsn_taf_gate_traverse(
   4920 	int	unit,
   4921 	bcm_tsn_taf_gate_traverse_cb	cb,
   4922 	void *	user_data)
   4923 {
   4924 	bcm_rlink_traverse_data_t	r_req;
   4925 	int	r_rv;
   4926 	uint32	r_key[] = {
   4927 		0x8df4de24,0x870eff37,0x3dbbc488,0xe796f10d,0xfed2907b };
   4928 	int	r_taf_gate;
   4929 
   4930 	sal_memset(&r_req, 0, sizeof(r_req));
   4931 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4932 	if (BCM_SUCCESS(r_rv)) {
   4933 		/* Pack request */
   4934 		/* Skip unit */
   4935 
   4936 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4937 			/* Unpack reply */
   4938 			/* Skip unit */
   4939 			BCM_UNPACK_U32(r_req.rx_ptr, r_taf_gate);
   4940 
   4941 			r_rv = cb(unit, r_taf_gate, user_data);
   4942 
   4943 			if (BCM_FAILURE(r_rv)) {
   4944 				break;
   4945 			}
   4946 		}
   4947 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4948 	}
   4949 
   4950 	return r_rv;
   4951 }
   4952 
   4953 int
   4954 bcm_client_tsn_taf_profile_traverse(
   4955 	int	unit,
   4956 	int	taf_gate,
   4957 	bcm_tsn_taf_profile_traverse_cb	cb,
   4958 	void *	user_data)
   4959 {
   4960 	bcm_rlink_traverse_data_t	r_req;
   4961 	int	r_rv;
   4962 	uint32	r_key[] = {
   4963 		0x7adcf05c,0x6704b5d0,0xa4ff5095,0x94ddc9a4,0x444131f9 };
   4964 	int	r_taf_gate;
   4965 	bcm_tsn_taf_profile_id_t	r_pid;
   4966 
   4967 	sal_memset(&r_req, 0, sizeof(r_req));
   4968 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   4969 	if (BCM_SUCCESS(r_rv)) {
   4970 		/* Pack request */
   4971 		/* Skip unit */
   4972 		BCM_PACK_U32(r_req.tx_ptr, taf_gate);
   4973 
   4974 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   4975 			/* Unpack reply */
   4976 			/* Skip unit */
   4977 			BCM_UNPACK_U32(r_req.rx_ptr, r_taf_gate);
   4978 			BCM_UNPACK_U32(r_req.rx_ptr, r_pid);
   4979 
   4980 			r_rv = cb(unit, r_taf_gate, r_pid, user_data);
   4981 
   4982 			if (BCM_FAILURE(r_rv)) {
   4983 				break;
   4984 			}
   4985 		}
   4986 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   4987 	}
   4988 
   4989 	return r_rv;
   4990 }
   4991 
   4992 #ifdef	INCLUDE_L3
   4993 
   4994 int
   4995 bcm_client_tunnel_initiator_traverse(
   4996 	int	unit,
   4997 	bcm_tunnel_initiator_traverse_cb	cb,
   4998 	void *	user_data)
   4999 {
   5000 	bcm_rlink_traverse_data_t	r_req;
   5001 	int	r_rv;
   5002 	uint32	r_key[] = {
   5003 		0x90aa59df,0x23e558c0,0x152679e9,0xbfdc8a62,0x05e3ca52 };
   5004 	bcm_tunnel_initiator_t	r_info;
   5005 	bcm_tunnel_initiator_t *	r_p_info;
   5006 
   5007 	sal_memset(&r_req, 0, sizeof(r_req));
   5008 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5009 	if (BCM_SUCCESS(r_rv)) {
   5010 		/* Pack request */
   5011 		/* Skip unit */
   5012 
   5013 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5014 			/* Unpack reply */
   5015 			/* Skip unit */
   5016 			if (*r_req.rx_ptr++ == 1) {
   5017 				r_p_info = NULL;
   5018 			} else {
   5019 				r_p_info = &r_info;
   5020 				r_req.rx_ptr = _bcm_unpack_tunnel_initiator(r_req.rx_ptr, r_p_info);
   5021 			}
   5022 
   5023 			r_rv = cb(unit, r_p_info, user_data);
   5024 
   5025 			if (BCM_FAILURE(r_rv)) {
   5026 				break;
   5027 			}
   5028 		}
   5029 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5030 	}
   5031 
   5032 	return r_rv;
   5033 }
   5034 
   5035 int
   5036 bcm_client_tunnel_terminator_config_traverse(
   5037 	int	unit,
   5038 	bcm_tunnel_terminator_config_traverse_cb	cb,
   5039 	void *	user_data)
   5040 {
   5041 	bcm_rlink_traverse_data_t	r_req;
   5042 	int	r_rv;
   5043 	uint32	r_key[] = {
   5044 		0xd7f837b9,0x3137bb6c,0x5c83172d,0xbb3e07ae,0x4819091d };
   5045 	bcm_tunnel_terminator_config_key_t	r_info;
   5046 	bcm_tunnel_terminator_config_key_t *	r_p_info;
   5047 
   5048 	sal_memset(&r_req, 0, sizeof(r_req));
   5049 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5050 	if (BCM_SUCCESS(r_rv)) {
   5051 		/* Pack request */
   5052 		/* Skip unit */
   5053 
   5054 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5055 			/* Unpack reply */
   5056 			/* Skip unit */
   5057 			if (*r_req.rx_ptr++ == 1) {
   5058 				r_p_info = NULL;
   5059 			} else {
   5060 				r_p_info = &r_info;
   5061 				r_req.rx_ptr = _bcm_unpack_tunnel_terminator_config_key(r_req.rx_ptr, r_p_info);
   5062 			}
   5063 
   5064 			r_rv = cb(unit, r_p_info, user_data);
   5065 
   5066 			if (BCM_FAILURE(r_rv)) {
   5067 				break;
   5068 			}
   5069 		}
   5070 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5071 	}
   5072 
   5073 	return r_rv;
   5074 }
   5075 
   5076 int
   5077 bcm_client_tunnel_terminator_traverse(
   5078 	int	unit,
   5079 	bcm_tunnel_terminator_traverse_cb	cb,
   5080 	void *	user_data)
   5081 {
   5082 	bcm_rlink_traverse_data_t	r_req;
   5083 	int	r_rv;
   5084 	uint32	r_key[] = {
   5085 		0xebac6b51,0x4b5e8c2d,0xfd8326cf,0x1e467ef5,0x97a852bd };
   5086 	bcm_tunnel_terminator_t	r_info;
   5087 	bcm_tunnel_terminator_t *	r_p_info;
   5088 
   5089 	sal_memset(&r_req, 0, sizeof(r_req));
   5090 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5091 	if (BCM_SUCCESS(r_rv)) {
   5092 		/* Pack request */
   5093 		/* Skip unit */
   5094 
   5095 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5096 			/* Unpack reply */
   5097 			/* Skip unit */
   5098 			if (*r_req.rx_ptr++ == 1) {
   5099 				r_p_info = NULL;
   5100 			} else {
   5101 				r_p_info = &r_info;
   5102 				r_req.rx_ptr = _bcm_unpack_tunnel_terminator(r_req.rx_ptr, r_p_info);
   5103 			}
   5104 
   5105 			r_rv = cb(unit, r_p_info, user_data);
   5106 
   5107 			if (BCM_FAILURE(r_rv)) {
   5108 				break;
   5109 			}
   5110 		}
   5111 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5112 	}
   5113 
   5114 	return r_rv;
   5115 }
   5116 
   5117 #endif	/* INCLUDE_L3 */
   5118 
   5119 int
   5120 bcm_client_vlan_cross_connect_traverse(
   5121 	int	unit,
   5122 	bcm_vlan_cross_connect_traverse_cb	cb,
   5123 	void *	user_data)
   5124 {
   5125 	bcm_rlink_traverse_data_t	r_req;
   5126 	int	r_rv;
   5127 	uint32	r_key[] = {
   5128 		0x9b81a1e3,0x30e13ed8,0x2c88e0b6,0x806061d6,0x2d25b128 };
   5129 	bcm_vlan_t	r_outer_vlan;
   5130 	bcm_vlan_t	r_inner_vlan;
   5131 	bcm_gport_t	r_port_1;
   5132 	bcm_gport_t	r_port_2;
   5133 
   5134 	sal_memset(&r_req, 0, sizeof(r_req));
   5135 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5136 	if (BCM_SUCCESS(r_rv)) {
   5137 		/* Pack request */
   5138 		/* Skip unit */
   5139 
   5140 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5141 			/* Unpack reply */
   5142 			/* Skip unit */
   5143 			BCM_UNPACK_U16(r_req.rx_ptr, r_outer_vlan);
   5144 			BCM_UNPACK_U16(r_req.rx_ptr, r_inner_vlan);
   5145 			BCM_UNPACK_U32(r_req.rx_ptr, r_port_1);
   5146 			BCM_UNPACK_U32(r_req.rx_ptr, r_port_2);
   5147 
   5148 			r_rv = cb(unit, r_outer_vlan, r_inner_vlan, r_port_1, r_port_2, user_data);
   5149 
   5150 			if (BCM_FAILURE(r_rv)) {
   5151 				break;
   5152 			}
   5153 		}
   5154 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5155 	}
   5156 
   5157 	return r_rv;
   5158 }
   5159 
   5160 int
   5161 bcm_client_vlan_dtag_range_traverse(
   5162 	int	unit,
   5163 	bcm_vlan_dtag_range_traverse_cb	cb,
   5164 	void *	user_data)
   5165 {
   5166 	bcm_rlink_traverse_data_t	r_req;
   5167 	int	r_rv;
   5168 	uint32	r_key[] = {
   5169 		0xecace45d,0x604f598a,0x2bd096c2,0x08717feb,0x18c78766 };
   5170 	bcm_gport_t	r_port;
   5171 	bcm_vlan_t	r_old_vlan_low;
   5172 	bcm_vlan_t	r_old_vlan_high;
   5173 	bcm_vlan_t	r_new_vlan;
   5174 	int	r_prio;
   5175 
   5176 	sal_memset(&r_req, 0, sizeof(r_req));
   5177 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5178 	if (BCM_SUCCESS(r_rv)) {
   5179 		/* Pack request */
   5180 		/* Skip unit */
   5181 
   5182 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5183 			/* Unpack reply */
   5184 			/* Skip unit */
   5185 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5186 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan_low);
   5187 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan_high);
   5188 			BCM_UNPACK_U16(r_req.rx_ptr, r_new_vlan);
   5189 			BCM_UNPACK_U32(r_req.rx_ptr, r_prio);
   5190 
   5191 			r_rv = cb(unit, r_port, r_old_vlan_low, r_old_vlan_high, r_new_vlan, r_prio, user_data);
   5192 
   5193 			if (BCM_FAILURE(r_rv)) {
   5194 				break;
   5195 			}
   5196 		}
   5197 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5198 	}
   5199 
   5200 	return r_rv;
   5201 }
   5202 
   5203 int
   5204 bcm_client_vlan_dtag_traverse(
   5205 	int	unit,
   5206 	bcm_vlan_dtag_traverse_cb	cb,
   5207 	void *	user_data)
   5208 {
   5209 	bcm_rlink_traverse_data_t	r_req;
   5210 	int	r_rv;
   5211 	uint32	r_key[] = {
   5212 		0x9463324c,0x9c4abd42,0xd58d3258,0x97c563e2,0xb4754ba3 };
   5213 	bcm_gport_t	r_port;
   5214 	bcm_vlan_t	r_old_vlan;
   5215 	bcm_vlan_t	r_new_vlan;
   5216 	int	r_prio;
   5217 
   5218 	sal_memset(&r_req, 0, sizeof(r_req));
   5219 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5220 	if (BCM_SUCCESS(r_rv)) {
   5221 		/* Pack request */
   5222 		/* Skip unit */
   5223 
   5224 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5225 			/* Unpack reply */
   5226 			/* Skip unit */
   5227 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5228 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan);
   5229 			BCM_UNPACK_U16(r_req.rx_ptr, r_new_vlan);
   5230 			BCM_UNPACK_U32(r_req.rx_ptr, r_prio);
   5231 
   5232 			r_rv = cb(unit, r_port, r_old_vlan, r_new_vlan, r_prio, user_data);
   5233 
   5234 			if (BCM_FAILURE(r_rv)) {
   5235 				break;
   5236 			}
   5237 		}
   5238 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5239 	}
   5240 
   5241 	return r_rv;
   5242 }
   5243 
   5244 int
   5245 bcm_client_vlan_ip_action_traverse(
   5246 	int	unit,
   5247 	bcm_vlan_ip_action_traverse_cb	cb,
   5248 	void *	user_data)
   5249 {
   5250 	bcm_rlink_traverse_data_t	r_req;
   5251 	int	r_rv;
   5252 	uint32	r_key[] = {
   5253 		0xefbb89d5,0x4a559662,0xde80ed51,0x4c007b8f,0x0974bb66 };
   5254 	bcm_vlan_ip_t	r_vlan_ip;
   5255 	bcm_vlan_action_set_t	r_action;
   5256 	bcm_vlan_ip_t *	r_p_vlan_ip;
   5257 	bcm_vlan_action_set_t *	r_p_action;
   5258 
   5259 	sal_memset(&r_req, 0, sizeof(r_req));
   5260 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5261 	if (BCM_SUCCESS(r_rv)) {
   5262 		/* Pack request */
   5263 		/* Skip unit */
   5264 
   5265 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5266 			/* Unpack reply */
   5267 			/* Skip unit */
   5268 			if (*r_req.rx_ptr++ == 1) {
   5269 				r_p_vlan_ip = NULL;
   5270 			} else {
   5271 				r_p_vlan_ip = &r_vlan_ip;
   5272 				r_req.rx_ptr = _bcm_unpack_vlan_ip(r_req.rx_ptr, r_p_vlan_ip);
   5273 			}
   5274 			if (*r_req.rx_ptr++ == 1) {
   5275 				r_p_action = NULL;
   5276 			} else {
   5277 				r_p_action = &r_action;
   5278 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5279 			}
   5280 
   5281 			r_rv = cb(unit, r_p_vlan_ip, r_p_action, user_data);
   5282 
   5283 			if (BCM_FAILURE(r_rv)) {
   5284 				break;
   5285 			}
   5286 		}
   5287 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5288 	}
   5289 
   5290 	return r_rv;
   5291 }
   5292 
   5293 int
   5294 bcm_client_vlan_mac_action_traverse(
   5295 	int	unit,
   5296 	bcm_vlan_mac_action_traverse_cb	cb,
   5297 	void *	user_data)
   5298 {
   5299 	bcm_rlink_traverse_data_t	r_req;
   5300 	int	r_rv;
   5301 	uint32	r_key[] = {
   5302 		0xa3ed9bb5,0x865fc75a,0xa70b17e5,0x985c5995,0x70c760f8 };
   5303 	bcm_mac_t	r_mac;
   5304 	bcm_vlan_action_set_t	r_action;
   5305 	bcm_vlan_action_set_t *	r_p_action;
   5306 
   5307 	sal_memset(&r_req, 0, sizeof(r_req));
   5308 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5309 	if (BCM_SUCCESS(r_rv)) {
   5310 		/* Pack request */
   5311 		/* Skip unit */
   5312 
   5313 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5314 			/* Unpack reply */
   5315 			/* Skip unit */
   5316 			r_req.rx_ptr = _bcm_unpack_mac(r_req.rx_ptr, r_mac);
   5317 			if (*r_req.rx_ptr++ == 1) {
   5318 				r_p_action = NULL;
   5319 			} else {
   5320 				r_p_action = &r_action;
   5321 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5322 			}
   5323 
   5324 			r_rv = cb(unit, r_mac, r_p_action, user_data);
   5325 
   5326 			if (BCM_FAILURE(r_rv)) {
   5327 				break;
   5328 			}
   5329 		}
   5330 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5331 	}
   5332 
   5333 	return r_rv;
   5334 }
   5335 
   5336 int
   5337 bcm_client_vlan_port_protocol_action_traverse(
   5338 	int	unit,
   5339 	bcm_vlan_port_protocol_action_traverse_cb	cb,
   5340 	void *	user_data)
   5341 {
   5342 	bcm_rlink_traverse_data_t	r_req;
   5343 	int	r_rv;
   5344 	uint32	r_key[] = {
   5345 		0x05e54e9f,0xdb836cfa,0xe46d5689,0x89bcfb19,0xff0ee886 };
   5346 	bcm_port_t	r_port;
   5347 	bcm_port_frametype_t	r_frame;
   5348 	bcm_port_ethertype_t	r_ether;
   5349 	bcm_vlan_action_set_t	r_action;
   5350 	bcm_vlan_action_set_t *	r_p_action;
   5351 
   5352 	sal_memset(&r_req, 0, sizeof(r_req));
   5353 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5354 	if (BCM_SUCCESS(r_rv)) {
   5355 		/* Pack request */
   5356 		/* Skip unit */
   5357 
   5358 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5359 			/* Unpack reply */
   5360 			/* Skip unit */
   5361 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5362 			BCM_UNPACK_U32(r_req.rx_ptr, r_frame);
   5363 			BCM_UNPACK_U16(r_req.rx_ptr, r_ether);
   5364 			if (*r_req.rx_ptr++ == 1) {
   5365 				r_p_action = NULL;
   5366 			} else {
   5367 				r_p_action = &r_action;
   5368 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5369 			}
   5370 
   5371 			r_rv = cb(unit, r_port, r_frame, r_ether, r_p_action, user_data);
   5372 
   5373 			if (BCM_FAILURE(r_rv)) {
   5374 				break;
   5375 			}
   5376 		}
   5377 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5378 	}
   5379 
   5380 	return r_rv;
   5381 }
   5382 
   5383 int
   5384 bcm_client_vlan_port_traverse(
   5385 	int	unit,
   5386 	bcm_vlan_port_traverse_info_t *	additional_info,
   5387 	bcm_vlan_port_traverse_cb	trav_fn,
   5388 	void *	user_data)
   5389 {
   5390 	bcm_rlink_traverse_data_t	r_req;
   5391 	int	r_rv;
   5392 	uint32	r_key[] = {
   5393 		0xe6204f0c,0xea05a511,0xd03ba466,0xf71764f3,0xac36ba33 };
   5394 	bcm_vlan_port_t	r_vlan_port;
   5395 	bcm_vlan_port_t *	r_p_vlan_port;
   5396 
   5397 	sal_memset(&r_req, 0, sizeof(r_req));
   5398 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5399 	if (BCM_SUCCESS(r_rv)) {
   5400 		/* Pack request */
   5401 		/* Skip unit */
   5402 		if (additional_info == NULL) {
   5403 			BCM_PACK_U8(r_req.tx_ptr, 1);
   5404 		} else {
   5405 			BCM_PACK_U8(r_req.tx_ptr, 0);
   5406 			BCM_PACK_U32(r_req.tx_ptr, additional_info->flags);
   5407 		}
   5408 
   5409 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5410 			/* Unpack reply */
   5411 			/* Skip unit */
   5412 			if (*r_req.rx_ptr++ == 1) {
   5413 				r_p_vlan_port = NULL;
   5414 			} else {
   5415 				r_p_vlan_port = &r_vlan_port;
   5416 				r_req.rx_ptr = _bcm_unpack_vlan_port(r_req.rx_ptr, r_p_vlan_port);
   5417 			}
   5418 
   5419 			r_rv = trav_fn(unit, r_p_vlan_port, user_data);
   5420 
   5421 			if (BCM_FAILURE(r_rv)) {
   5422 				break;
   5423 			}
   5424 		}
   5425 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5426 	}
   5427 
   5428 	return r_rv;
   5429 }
   5430 
   5431 int
   5432 bcm_client_vlan_translate_action_range_traverse(
   5433 	int	unit,
   5434 	bcm_vlan_translate_action_range_traverse_cb	cb,
   5435 	void *	user_data)
   5436 {
   5437 	bcm_rlink_traverse_data_t	r_req;
   5438 	int	r_rv;
   5439 	uint32	r_key[] = {
   5440 		0x31fa6e34,0xacb376f6,0xc54b4087,0xf40b84c4,0x11d6c6d8 };
   5441 	bcm_gport_t	r_port;
   5442 	bcm_vlan_t	r_outer_vlan_low;
   5443 	bcm_vlan_t	r_outer_vlan_high;
   5444 	bcm_vlan_t	r_inner_vlan_low;
   5445 	bcm_vlan_t	r_inner_vlan_high;
   5446 	bcm_vlan_action_set_t	r_action;
   5447 	bcm_vlan_action_set_t *	r_p_action;
   5448 
   5449 	sal_memset(&r_req, 0, sizeof(r_req));
   5450 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5451 	if (BCM_SUCCESS(r_rv)) {
   5452 		/* Pack request */
   5453 		/* Skip unit */
   5454 
   5455 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5456 			/* Unpack reply */
   5457 			/* Skip unit */
   5458 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5459 			BCM_UNPACK_U16(r_req.rx_ptr, r_outer_vlan_low);
   5460 			BCM_UNPACK_U16(r_req.rx_ptr, r_outer_vlan_high);
   5461 			BCM_UNPACK_U16(r_req.rx_ptr, r_inner_vlan_low);
   5462 			BCM_UNPACK_U16(r_req.rx_ptr, r_inner_vlan_high);
   5463 			if (*r_req.rx_ptr++ == 1) {
   5464 				r_p_action = NULL;
   5465 			} else {
   5466 				r_p_action = &r_action;
   5467 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5468 			}
   5469 
   5470 			r_rv = cb(unit, r_port, r_outer_vlan_low, r_outer_vlan_high, r_inner_vlan_low, r_inner_vlan_high, r_p_action, user_data);
   5471 
   5472 			if (BCM_FAILURE(r_rv)) {
   5473 				break;
   5474 			}
   5475 		}
   5476 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5477 	}
   5478 
   5479 	return r_rv;
   5480 }
   5481 
   5482 int
   5483 bcm_client_vlan_translate_action_traverse(
   5484 	int	unit,
   5485 	bcm_vlan_translate_action_traverse_cb	cb,
   5486 	void *	user_data)
   5487 {
   5488 	bcm_rlink_traverse_data_t	r_req;
   5489 	int	r_rv;
   5490 	uint32	r_key[] = {
   5491 		0x6994f48d,0x4364f04f,0x0c31cf30,0x5487894a,0xccc734a1 };
   5492 	bcm_gport_t	r_port;
   5493 	bcm_vlan_translate_key_t	r_key_type;
   5494 	bcm_vlan_t	r_outer_vlan;
   5495 	bcm_vlan_t	r_inner_vlan;
   5496 	bcm_vlan_action_set_t	r_action;
   5497 	bcm_vlan_action_set_t *	r_p_action;
   5498 
   5499 	sal_memset(&r_req, 0, sizeof(r_req));
   5500 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5501 	if (BCM_SUCCESS(r_rv)) {
   5502 		/* Pack request */
   5503 		/* Skip unit */
   5504 
   5505 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5506 			/* Unpack reply */
   5507 			/* Skip unit */
   5508 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5509 			BCM_UNPACK_U32(r_req.rx_ptr, r_key_type);
   5510 			BCM_UNPACK_U16(r_req.rx_ptr, r_outer_vlan);
   5511 			BCM_UNPACK_U16(r_req.rx_ptr, r_inner_vlan);
   5512 			if (*r_req.rx_ptr++ == 1) {
   5513 				r_p_action = NULL;
   5514 			} else {
   5515 				r_p_action = &r_action;
   5516 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5517 			}
   5518 
   5519 			r_rv = cb(unit, r_port, r_key_type, r_outer_vlan, r_inner_vlan, r_p_action, user_data);
   5520 
   5521 			if (BCM_FAILURE(r_rv)) {
   5522 				break;
   5523 			}
   5524 		}
   5525 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5526 	}
   5527 
   5528 	return r_rv;
   5529 }
   5530 
   5531 int
   5532 bcm_client_vlan_translate_egress_action_traverse(
   5533 	int	unit,
   5534 	bcm_vlan_translate_egress_action_traverse_cb	cb,
   5535 	void *	user_data)
   5536 {
   5537 	bcm_rlink_traverse_data_t	r_req;
   5538 	int	r_rv;
   5539 	uint32	r_key[] = {
   5540 		0xc13ddf2f,0xfb47b82d,0x4cda9795,0xc016496d,0xd6ec48fd };
   5541 	int	r_port_class;
   5542 	bcm_vlan_t	r_outer_vlan;
   5543 	bcm_vlan_t	r_inner_vlan;
   5544 	bcm_vlan_action_set_t	r_action;
   5545 	bcm_vlan_action_set_t *	r_p_action;
   5546 
   5547 	sal_memset(&r_req, 0, sizeof(r_req));
   5548 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5549 	if (BCM_SUCCESS(r_rv)) {
   5550 		/* Pack request */
   5551 		/* Skip unit */
   5552 
   5553 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5554 			/* Unpack reply */
   5555 			/* Skip unit */
   5556 			BCM_UNPACK_U32(r_req.rx_ptr, r_port_class);
   5557 			BCM_UNPACK_U16(r_req.rx_ptr, r_outer_vlan);
   5558 			BCM_UNPACK_U16(r_req.rx_ptr, r_inner_vlan);
   5559 			if (*r_req.rx_ptr++ == 1) {
   5560 				r_p_action = NULL;
   5561 			} else {
   5562 				r_p_action = &r_action;
   5563 				r_req.rx_ptr = _bcm_unpack_vlan_action_set(r_req.rx_ptr, r_p_action);
   5564 			}
   5565 
   5566 			r_rv = cb(unit, r_port_class, r_outer_vlan, r_inner_vlan, r_p_action, user_data);
   5567 
   5568 			if (BCM_FAILURE(r_rv)) {
   5569 				break;
   5570 			}
   5571 		}
   5572 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5573 	}
   5574 
   5575 	return r_rv;
   5576 }
   5577 
   5578 int
   5579 bcm_client_vlan_translate_egress_traverse(
   5580 	int	unit,
   5581 	bcm_vlan_translate_egress_traverse_cb	cb,
   5582 	void *	user_data)
   5583 {
   5584 	bcm_rlink_traverse_data_t	r_req;
   5585 	int	r_rv;
   5586 	uint32	r_key[] = {
   5587 		0x2d222e96,0x2f3ca059,0x8b18e874,0xa3c14190,0xf4512a5b };
   5588 	bcm_gport_t	r_port;
   5589 	bcm_vlan_t	r_old_vlan;
   5590 	bcm_vlan_t	r_new_vlan;
   5591 	int	r_prio;
   5592 
   5593 	sal_memset(&r_req, 0, sizeof(r_req));
   5594 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5595 	if (BCM_SUCCESS(r_rv)) {
   5596 		/* Pack request */
   5597 		/* Skip unit */
   5598 
   5599 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5600 			/* Unpack reply */
   5601 			/* Skip unit */
   5602 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5603 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan);
   5604 			BCM_UNPACK_U16(r_req.rx_ptr, r_new_vlan);
   5605 			BCM_UNPACK_U32(r_req.rx_ptr, r_prio);
   5606 
   5607 			r_rv = cb(unit, r_port, r_old_vlan, r_new_vlan, r_prio, user_data);
   5608 
   5609 			if (BCM_FAILURE(r_rv)) {
   5610 				break;
   5611 			}
   5612 		}
   5613 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5614 	}
   5615 
   5616 	return r_rv;
   5617 }
   5618 
   5619 int
   5620 bcm_client_vlan_translate_range_traverse(
   5621 	int	unit,
   5622 	bcm_vlan_translate_range_traverse_cb	cb,
   5623 	void *	user_data)
   5624 {
   5625 	bcm_rlink_traverse_data_t	r_req;
   5626 	int	r_rv;
   5627 	uint32	r_key[] = {
   5628 		0x1fc89dd9,0xc16c9083,0x4aeb7b35,0x1b8d0c83,0x4f104003 };
   5629 	bcm_gport_t	r_port;
   5630 	bcm_vlan_t	r_old_vlan_low;
   5631 	bcm_vlan_t	r_old_vlan_high;
   5632 	bcm_vlan_t	r_new_vlan;
   5633 	int	r_prio;
   5634 
   5635 	sal_memset(&r_req, 0, sizeof(r_req));
   5636 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5637 	if (BCM_SUCCESS(r_rv)) {
   5638 		/* Pack request */
   5639 		/* Skip unit */
   5640 
   5641 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5642 			/* Unpack reply */
   5643 			/* Skip unit */
   5644 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5645 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan_low);
   5646 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan_high);
   5647 			BCM_UNPACK_U16(r_req.rx_ptr, r_new_vlan);
   5648 			BCM_UNPACK_U32(r_req.rx_ptr, r_prio);
   5649 
   5650 			r_rv = cb(unit, r_port, r_old_vlan_low, r_old_vlan_high, r_new_vlan, r_prio, user_data);
   5651 
   5652 			if (BCM_FAILURE(r_rv)) {
   5653 				break;
   5654 			}
   5655 		}
   5656 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5657 	}
   5658 
   5659 	return r_rv;
   5660 }
   5661 
   5662 int
   5663 bcm_client_vlan_translate_traverse(
   5664 	int	unit,
   5665 	bcm_vlan_translate_traverse_cb	cb,
   5666 	void *	user_data)
   5667 {
   5668 	bcm_rlink_traverse_data_t	r_req;
   5669 	int	r_rv;
   5670 	uint32	r_key[] = {
   5671 		0x0640d32f,0x4f1e5c31,0xcdf1e172,0xae1e6445,0x9ce22c65 };
   5672 	bcm_gport_t	r_port;
   5673 	bcm_vlan_t	r_old_vlan;
   5674 	bcm_vlan_t	r_new_vlan;
   5675 	int	r_prio;
   5676 
   5677 	sal_memset(&r_req, 0, sizeof(r_req));
   5678 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5679 	if (BCM_SUCCESS(r_rv)) {
   5680 		/* Pack request */
   5681 		/* Skip unit */
   5682 
   5683 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5684 			/* Unpack reply */
   5685 			/* Skip unit */
   5686 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5687 			BCM_UNPACK_U16(r_req.rx_ptr, r_old_vlan);
   5688 			BCM_UNPACK_U16(r_req.rx_ptr, r_new_vlan);
   5689 			BCM_UNPACK_U32(r_req.rx_ptr, r_prio);
   5690 
   5691 			r_rv = cb(unit, r_port, r_old_vlan, r_new_vlan, r_prio, user_data);
   5692 
   5693 			if (BCM_FAILURE(r_rv)) {
   5694 				break;
   5695 			}
   5696 		}
   5697 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5698 	}
   5699 
   5700 	return r_rv;
   5701 }
   5702 
   5703 #ifdef	INCLUDE_L3
   5704 
   5705 int
   5706 bcm_client_vlan_vpn_traverse(
   5707 	int	unit,
   5708 	bcm_vlan_vpn_traverse_cb	cb,
   5709 	void *	user_data)
   5710 {
   5711 	bcm_rlink_traverse_data_t	r_req;
   5712 	int	r_rv;
   5713 	uint32	r_key[] = {
   5714 		0x916f158c,0xfaf8a47f,0x119d86f8,0x00e0d93d,0xb225bc67 };
   5715 	bcm_vlan_vpn_config_t	r_info;
   5716 	bcm_vlan_vpn_config_t *	r_p_info;
   5717 
   5718 	sal_memset(&r_req, 0, sizeof(r_req));
   5719 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5720 	if (BCM_SUCCESS(r_rv)) {
   5721 		/* Pack request */
   5722 		/* Skip unit */
   5723 
   5724 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5725 			/* Unpack reply */
   5726 			/* Skip unit */
   5727 			if (*r_req.rx_ptr++ == 1) {
   5728 				r_p_info = NULL;
   5729 			} else {
   5730 				r_p_info = &r_info;
   5731 				r_req.rx_ptr = _bcm_unpack_vlan_vpn_config(r_req.rx_ptr, r_p_info);
   5732 			}
   5733 
   5734 			r_rv = cb(unit, r_p_info, user_data);
   5735 
   5736 			if (BCM_FAILURE(r_rv)) {
   5737 				break;
   5738 			}
   5739 		}
   5740 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5741 	}
   5742 
   5743 	return r_rv;
   5744 }
   5745 
   5746 #endif	/* INCLUDE_L3 */
   5747 
   5748 int
   5749 bcm_client_vswitch_cross_connect_traverse(
   5750 	int	unit,
   5751 	bcm_vswitch_cross_connect_traverse_cb	cb,
   5752 	void *	user_data)
   5753 {
   5754 	bcm_rlink_traverse_data_t	r_req;
   5755 	int	r_rv;
   5756 	uint32	r_key[] = {
   5757 		0x9e2f0a59,0x55f5b476,0x79588357,0x0d51da96,0x143c212f };
   5758 	bcm_vswitch_cross_connect_t	r_gports;
   5759 	bcm_vswitch_cross_connect_t *	r_p_gports;
   5760 
   5761 	sal_memset(&r_req, 0, sizeof(r_req));
   5762 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5763 	if (BCM_SUCCESS(r_rv)) {
   5764 		/* Pack request */
   5765 		/* Skip unit */
   5766 
   5767 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5768 			/* Unpack reply */
   5769 			/* Skip unit */
   5770 			if (*r_req.rx_ptr++ == 1) {
   5771 				r_p_gports = NULL;
   5772 			} else {
   5773 				r_p_gports = &r_gports;
   5774 				r_req.rx_ptr = _bcm_unpack_vswitch_cross_connect(r_req.rx_ptr, r_p_gports);
   5775 			}
   5776 
   5777 			r_rv = cb(unit, r_p_gports, user_data);
   5778 
   5779 			if (BCM_FAILURE(r_rv)) {
   5780 				break;
   5781 			}
   5782 		}
   5783 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5784 	}
   5785 
   5786 	return r_rv;
   5787 }
   5788 
   5789 int
   5790 bcm_client_vswitch_port_traverse(
   5791 	int	unit,
   5792 	bcm_vlan_t	vsi,
   5793 	bcm_vswitch_port_traverse_cb	cb,
   5794 	void *	user_data)
   5795 {
   5796 	bcm_rlink_traverse_data_t	r_req;
   5797 	int	r_rv;
   5798 	uint32	r_key[] = {
   5799 		0x49d835d6,0xa0e649e4,0xe5ccb8a1,0x5528cc10,0x2111ef4a };
   5800 	bcm_vlan_t	r_vsi;
   5801 	bcm_gport_t	r_port;
   5802 
   5803 	sal_memset(&r_req, 0, sizeof(r_req));
   5804 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5805 	if (BCM_SUCCESS(r_rv)) {
   5806 		/* Pack request */
   5807 		/* Skip unit */
   5808 		BCM_PACK_U16(r_req.tx_ptr, vsi);
   5809 
   5810 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5811 			/* Unpack reply */
   5812 			/* Skip unit */
   5813 			BCM_UNPACK_U16(r_req.rx_ptr, r_vsi);
   5814 			BCM_UNPACK_U32(r_req.rx_ptr, r_port);
   5815 
   5816 			r_rv = cb(unit, r_vsi, r_port, user_data);
   5817 
   5818 			if (BCM_FAILURE(r_rv)) {
   5819 				break;
   5820 			}
   5821 		}
   5822 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5823 	}
   5824 
   5825 	return r_rv;
   5826 }
   5827 
   5828 #ifdef	INCLUDE_L3
   5829 
   5830 int
   5831 bcm_client_vxlan_network_domain_config_traverse(
   5832 	int	unit,
   5833 	bcm_vxlan_network_domain_config_additional_info_t *	additional_info,
   5834 	bcm_vxlan_network_domain_config_traverse_cb	cb,
   5835 	void *	user_data)
   5836 {
   5837 	bcm_rlink_traverse_data_t	r_req;
   5838 	int	r_rv;
   5839 	uint32	r_key[] = {
   5840 		0xb7ae1ea6,0x543b9c79,0x76ae9868,0x5e33c02a,0x35e1b661 };
   5841 	bcm_vxlan_network_domain_config_t	r_info;
   5842 	bcm_vxlan_network_domain_config_t *	r_p_info;
   5843 
   5844 	sal_memset(&r_req, 0, sizeof(r_req));
   5845 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5846 	if (BCM_SUCCESS(r_rv)) {
   5847 		/* Pack request */
   5848 		/* Skip unit */
   5849 		if (additional_info == NULL) {
   5850 			BCM_PACK_U8(r_req.tx_ptr, 1);
   5851 		} else {
   5852 			BCM_PACK_U8(r_req.tx_ptr, 0);
   5853 			BCM_PACK_U32(r_req.tx_ptr, additional_info->flags);
   5854 		}
   5855 
   5856 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5857 			/* Unpack reply */
   5858 			/* Skip unit */
   5859 			if (*r_req.rx_ptr++ == 1) {
   5860 				r_p_info = NULL;
   5861 			} else {
   5862 				r_p_info = &r_info;
   5863 				r_req.rx_ptr = _bcm_unpack_vxlan_network_domain_config(r_req.rx_ptr, r_p_info);
   5864 			}
   5865 
   5866 			r_rv = cb(unit, r_p_info, user_data);
   5867 
   5868 			if (BCM_FAILURE(r_rv)) {
   5869 				break;
   5870 			}
   5871 		}
   5872 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5873 	}
   5874 
   5875 	return r_rv;
   5876 }
   5877 
   5878 int
   5879 bcm_client_vxlan_port_traverse(
   5880 	int	unit,
   5881 	bcm_vxlan_port_traverse_cb	cb,
   5882 	void *	user_data)
   5883 {
   5884 	bcm_rlink_traverse_data_t	r_req;
   5885 	int	r_rv;
   5886 	uint32	r_key[] = {
   5887 		0x5cff6bd0,0x7fcf8106,0x1aae4f3a,0x7923c677,0x16fe5011 };
   5888 	bcm_vxlan_port_t	r_info;
   5889 	bcm_vxlan_port_t *	r_p_info;
   5890 
   5891 	sal_memset(&r_req, 0, sizeof(r_req));
   5892 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5893 	if (BCM_SUCCESS(r_rv)) {
   5894 		/* Pack request */
   5895 		/* Skip unit */
   5896 
   5897 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5898 			/* Unpack reply */
   5899 			/* Skip unit */
   5900 			if (*r_req.rx_ptr++ == 1) {
   5901 				r_p_info = NULL;
   5902 			} else {
   5903 				r_p_info = &r_info;
   5904 				r_req.rx_ptr = _bcm_unpack_vxlan_port(r_req.rx_ptr, r_p_info);
   5905 			}
   5906 
   5907 			r_rv = cb(unit, r_p_info, user_data);
   5908 
   5909 			if (BCM_FAILURE(r_rv)) {
   5910 				break;
   5911 			}
   5912 		}
   5913 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5914 	}
   5915 
   5916 	return r_rv;
   5917 }
   5918 
   5919 int
   5920 bcm_client_vxlan_tunnel_initiator_traverse(
   5921 	int	unit,
   5922 	bcm_tunnel_initiator_traverse_cb	cb,
   5923 	void *	user_data)
   5924 {
   5925 	bcm_rlink_traverse_data_t	r_req;
   5926 	int	r_rv;
   5927 	uint32	r_key[] = {
   5928 		0xbc51e59b,0x398a74d7,0x01f51080,0x586f40a7,0xd7b07863 };
   5929 	bcm_tunnel_initiator_t	r_info;
   5930 	bcm_tunnel_initiator_t *	r_p_info;
   5931 
   5932 	sal_memset(&r_req, 0, sizeof(r_req));
   5933 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5934 	if (BCM_SUCCESS(r_rv)) {
   5935 		/* Pack request */
   5936 		/* Skip unit */
   5937 
   5938 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5939 			/* Unpack reply */
   5940 			/* Skip unit */
   5941 			if (*r_req.rx_ptr++ == 1) {
   5942 				r_p_info = NULL;
   5943 			} else {
   5944 				r_p_info = &r_info;
   5945 				r_req.rx_ptr = _bcm_unpack_tunnel_initiator(r_req.rx_ptr, r_p_info);
   5946 			}
   5947 
   5948 			r_rv = cb(unit, r_p_info, user_data);
   5949 
   5950 			if (BCM_FAILURE(r_rv)) {
   5951 				break;
   5952 			}
   5953 		}
   5954 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5955 	}
   5956 
   5957 	return r_rv;
   5958 }
   5959 
   5960 int
   5961 bcm_client_vxlan_tunnel_terminator_traverse(
   5962 	int	unit,
   5963 	bcm_tunnel_terminator_traverse_cb	cb,
   5964 	void *	user_data)
   5965 {
   5966 	bcm_rlink_traverse_data_t	r_req;
   5967 	int	r_rv;
   5968 	uint32	r_key[] = {
   5969 		0x5662fadf,0xfce47da3,0x34b7cd10,0xec6b5a16,0x9f0c27e7 };
   5970 	bcm_tunnel_terminator_t	r_info;
   5971 	bcm_tunnel_terminator_t *	r_p_info;
   5972 
   5973 	sal_memset(&r_req, 0, sizeof(r_req));
   5974 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   5975 	if (BCM_SUCCESS(r_rv)) {
   5976 		/* Pack request */
   5977 		/* Skip unit */
   5978 
   5979 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   5980 			/* Unpack reply */
   5981 			/* Skip unit */
   5982 			if (*r_req.rx_ptr++ == 1) {
   5983 				r_p_info = NULL;
   5984 			} else {
   5985 				r_p_info = &r_info;
   5986 				r_req.rx_ptr = _bcm_unpack_tunnel_terminator(r_req.rx_ptr, r_p_info);
   5987 			}
   5988 
   5989 			r_rv = cb(unit, r_p_info, user_data);
   5990 
   5991 			if (BCM_FAILURE(r_rv)) {
   5992 				break;
   5993 			}
   5994 		}
   5995 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   5996 	}
   5997 
   5998 	return r_rv;
   5999 }
   6000 
   6001 int
   6002 bcm_client_vxlan_vpn_traverse(
   6003 	int	unit,
   6004 	bcm_vxlan_vpn_traverse_cb	cb,
   6005 	void *	user_data)
   6006 {
   6007 	bcm_rlink_traverse_data_t	r_req;
   6008 	int	r_rv;
   6009 	uint32	r_key[] = {
   6010 		0x45431813,0x968e724f,0x056b3aa5,0xb5103248,0x701ce63a };
   6011 	bcm_vxlan_vpn_config_t	r_info;
   6012 	bcm_vxlan_vpn_config_t *	r_p_info;
   6013 
   6014 	sal_memset(&r_req, 0, sizeof(r_req));
   6015 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   6016 	if (BCM_SUCCESS(r_rv)) {
   6017 		/* Pack request */
   6018 		/* Skip unit */
   6019 
   6020 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   6021 			/* Unpack reply */
   6022 			/* Skip unit */
   6023 			if (*r_req.rx_ptr++ == 1) {
   6024 				r_p_info = NULL;
   6025 			} else {
   6026 				r_p_info = &r_info;
   6027 				r_req.rx_ptr = _bcm_unpack_vxlan_vpn_config(r_req.rx_ptr, r_p_info);
   6028 			}
   6029 
   6030 			r_rv = cb(unit, r_p_info, user_data);
   6031 
   6032 			if (BCM_FAILURE(r_rv)) {
   6033 				break;
   6034 			}
   6035 		}
   6036 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   6037 	}
   6038 
   6039 	return r_rv;
   6040 }
   6041 
   6042 int
   6043 bcm_client_wlan_client_traverse(
   6044 	int	unit,
   6045 	bcm_wlan_client_traverse_cb	cb,
   6046 	void *	user_data)
   6047 {
   6048 	bcm_rlink_traverse_data_t	r_req;
   6049 	int	r_rv;
   6050 	uint32	r_key[] = {
   6051 		0xa128eb0b,0xefa0c614,0x0584f855,0xfe95099e,0x95ad77ea };
   6052 	bcm_wlan_client_t	r_info;
   6053 	bcm_wlan_client_t *	r_p_info;
   6054 
   6055 	sal_memset(&r_req, 0, sizeof(r_req));
   6056 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   6057 	if (BCM_SUCCESS(r_rv)) {
   6058 		/* Pack request */
   6059 		/* Skip unit */
   6060 
   6061 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   6062 			/* Unpack reply */
   6063 			/* Skip unit */
   6064 			if (*r_req.rx_ptr++ == 1) {
   6065 				r_p_info = NULL;
   6066 			} else {
   6067 				r_p_info = &r_info;
   6068 				r_req.rx_ptr = _bcm_unpack_wlan_client(r_req.rx_ptr, r_p_info);
   6069 			}
   6070 
   6071 			r_rv = cb(unit, r_p_info, user_data);
   6072 
   6073 			if (BCM_FAILURE(r_rv)) {
   6074 				break;
   6075 			}
   6076 		}
   6077 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   6078 	}
   6079 
   6080 	return r_rv;
   6081 }
   6082 
   6083 int
   6084 bcm_client_wlan_port_traverse(
   6085 	int	unit,
   6086 	bcm_wlan_port_traverse_cb	cb,
   6087 	void *	user_data)
   6088 {
   6089 	bcm_rlink_traverse_data_t	r_req;
   6090 	int	r_rv;
   6091 	uint32	r_key[] = {
   6092 		0xc5c947cb,0xcb5fa2e9,0x62b91776,0x5327848f,0x5208fc54 };
   6093 	bcm_wlan_port_t	r_info;
   6094 	bcm_wlan_port_t *	r_p_info;
   6095 
   6096 	sal_memset(&r_req, 0, sizeof(r_req));
   6097 	r_rv = bcm_rlink_traverse_request_start(unit, &r_req, r_key);
   6098 	if (BCM_SUCCESS(r_rv)) {
   6099 		/* Pack request */
   6100 		/* Skip unit */
   6101 
   6102 		while (bcm_rlink_traverse_reply_get(unit, &r_req)) {
   6103 			/* Unpack reply */
   6104 			/* Skip unit */
   6105 			if (*r_req.rx_ptr++ == 1) {
   6106 				r_p_info = NULL;
   6107 			} else {
   6108 				r_p_info = &r_info;
   6109 				r_req.rx_ptr = _bcm_unpack_wlan_port(r_req.rx_ptr, r_p_info);
   6110 			}
   6111 
   6112 			r_rv = cb(unit, r_p_info, user_data);
   6113 
   6114 			if (BCM_FAILURE(r_rv)) {
   6115 				break;
   6116 			}
   6117 		}
   6118 		r_rv = bcm_rlink_traverse_request_done(unit, r_rv, &r_req);
   6119 	}
   6120 
   6121 	return r_rv;
   6122 }
   6123 
   6124 #endif	/* INCLUDE_L3 */
   6125 
   6126 #endif	/* BCM_RPC_SUPPORT */