aib & preroute TOI

无路可走 (2011-05-16 23:21:17) 评论 (0)

Major points

AIB is the most stable component (Atul)

1) AIB external managed adjacency
2) Software Path bundle load balance
3) Packet capture
4) Preroute Mcast
5) Preroute Unicast

BM-ADJ control path
Producer (create/delete/modify) -> AIB -> PD BM ADJ -> HW
IM/IIR -> PI BM ADJ -> PD BM ADJ -> PI AIB -> PD BM ADJ -> HW

Unicast preroute path
RP CPU -> LC CPU (prior 4.1.0 of ISSU changes)
RP CPU -> LC PSE (from 4.1.0) set next hop bit and next hop address, next hop address must be connected address.
RSVP / Linklocal / OSPF-EIGRP etc. session init packets


AIB external registration
=================
#define BMP_ADJ_CMPL_DLL_NAME   "libbundlemgr_platform_hfr_cmpl_cti.dll"
dll_parms.aibcl_compl_fn_dll_name       = BMP_ADJ_CMPL_DLL_NAME;
#define BMP_ADJ_CMPL_FUNC_NAME  "bmp_adj_cmpl_adj"
dll_parms.aibcl_compl_fn_name           = BMP_ADJ_CMPL_FUNC_NAME;
#define BMP_ADJ_DLL_NAME        "libbundlemgr_adj_pd.dll";
dll_parms.aibcl_plat_dll_name           = BMP_ADJ_DLL_NAME;
#define BMP_ADJ_PROG_FUNC_NAME  "bmp_prog_adj";
dll_parms.aibcl_plat_prog_fn_name       = BMP_ADJ_PROG_FUNC_NAME;
#define BMP_ADJ_STATS_FUNC_NAME "bmp_read_stats"
dll_parms.aibcl_plat_read_stats_fn_name = BMP_ADJ_STATS_FUNC_NAME;

Bundle Load Balance in SW path
=======================
aib_complete_entry
  calls dlldata->complete_fn() function (bmp_adj_cmpl_adj())


Packet Capture Function
=======================
packet drop capture
drop in PSE -> shq/spr -> squidlib->fabio->qad->forwarder driver (drop packets capture here)

packet punt capture on interface
1) enable software packet capture on an interface (phy only)
      l2_adj_rewrite          
     queue_fifo              
     pak_capture             
     txm_nopull              

     ipv4                    
     hdlc                    
     l2_adj_rewrite          
     queue_fifo              
     link_jump               
     txm_nopull              


2) drop packet capture
    fwd_spr_pak_rx()
    if (pak_capture_capture_packet(pak, PC_DIRECTION_INGRESS) ==
        PCR_DROP_PACKET)
    fwd_shq_pak_rx()
    if (pak_capture_capture_packet(pak, PC_DIRECTION_EGRESS) ==
        PCR_DROP_PACKET) {