/* * debug rsvp options */ void debug_tca_options_rsvp(int lev, struct tcmsg *tcm, struct rtattr *tca, const char *name) { struct rtattr *rsvp[__TCA_RSVP_MAX]; rec_dbg(lev, "%s(%hu):", name, RTA_ALIGN(tca->rta_len)); parse_nested_rtattr(rsvp, TCA_RSVP_MAX, tca); if(rsvp[TCA_RSVP_CLASSID]) debug_tca_classid(lev+1, rsvp[TCA_RSVP_CLASSID], "TCA_RSVP_CLASSID"); if(rsvp[TCA_RSVP_DST]) debug_rta_tc_addr(lev+1, tcm, rsvp[TCA_RSVP_DST], "TCA_RSVP_DST"); if(rsvp[TCA_RSVP_SRC]) debug_rta_tc_addr(lev+1, tcm, rsvp[TCA_RSVP_SRC], "TCA_RSVP_SRC"); if(rsvp[TCA_RSVP_PINFO]) debug_tca_rsvp_pinfo(lev+1, rsvp[TCA_RSVP_PINFO], "TCA_RSVP_PINFO"); if(rsvp[TCA_RSVP_POLICE]) debug_tca_act_options_police(lev+1, rsvp[TCA_RSVP_POLICE], "TCA_RSVP_POLICE"); if(rsvp[TCA_RSVP_ACT]) debug_tca_acts(lev+1, rsvp[TCA_RSVP_ACT], "TCA_RSVP_ACT"); }
/* * debug traffic control action message */ void debug_tcamsg(int lev, struct tcamsg *tcam, struct rtattr *tcaa[], int tcam_len) { /* debug tcamsg */ rec_dbg(lev, "*********************************************************************"); rec_dbg(lev, "[ tcamsg(%d) ]", NLMSG_ALIGN(sizeof(*tcam))); rec_dbg(lev, " tca_family(%d): 0x%02x(%s)", sizeof(tcam->tca_family), tcam->tca_family, conv_af_type(tcam->tca_family, 1)); rec_dbg(lev, " tca__pad1(%d): 0x%02x", sizeof(tcam->tca__pad1), tcam->tca__pad1); rec_dbg(lev, " tca__pad2(%d): 0x%04x", sizeof(tcam->tca__pad2), tcam->tca__pad2); /* debug traffic control action attributes */ rec_dbg(lev,"*********************************************************************"); rec_dbg(lev, "[ tcamsg attributes(%d) ]", NLMSG_ALIGN(tcam_len - NLMSG_ALIGN(sizeof(*tcam)))); if(tcaa[TCA_ACT_TAB]) debug_tca_acts(lev+1, tcaa[TCA_ACT_TAB], "TCA_ACT_TAB"); rec_dbg(lev, ""); }
/* * debug flow options */ void debug_tca_options_flow(int lev, struct rtattr *tca, const char *name) { struct rtattr *flow[__TCA_FLOW_MAX]; rec_dbg(lev, "%s(%hu):", name, RTA_ALIGN(tca->rta_len)); parse_nested_rtattr(flow, TCA_FLOW_MAX, tca); if(flow[TCA_FLOW_KEYS]) debug_rta_u32(lev+1, flow[TCA_FLOW_KEYS], "TCA_FLOW_KEYS", conv_flow_key); if(flow[TCA_FLOW_MODE]) debug_rta_u32(lev+1, flow[TCA_FLOW_MODE], "TCA_FLOW_MODE", conv_flow_mode); if(flow[TCA_FLOW_BASECLASS]) debug_tca_classid(lev+1, flow[TCA_FLOW_BASECLASS], "TCA_FLOW_BASECLASS"); if(flow[TCA_FLOW_RSHIFT]) debug_rta_u32(lev+1, flow[TCA_FLOW_RSHIFT], "TCA_FLOW_RSHIT", NULL); if(flow[TCA_FLOW_ADDEND]) debug_rta_u32x(lev+1, flow[TCA_FLOW_ADDEND], "TCA_FLOW_ADDEND", NULL); if(flow[TCA_FLOW_MASK]) debug_rta_u32x(lev+1, flow[TCA_FLOW_MASK], "TCA_FLOW_MASK", NULL); if(flow[TCA_FLOW_XOR]) debug_rta_u32x(lev+1, flow[TCA_FLOW_XOR], "TCA_FLOW_XOR", NULL); if(flow[TCA_FLOW_DIVISOR]) debug_rta_u32(lev+1, flow[TCA_FLOW_DIVISOR], "TCA_FLOW_DIVISOR", NULL); if(flow[TCA_FLOW_ACT]) debug_tca_acts(lev+1, flow[TCA_FLOW_ACT], "TCA_FLOW_ACT"); if(flow[TCA_FLOW_POLICE]) debug_tca_act_options_police(lev+1, flow[TCA_FLOW_POLICE], "TCA_FLOW_POLICE"); if(flow[TCA_FLOW_EMATCHES]) debug_tca_ematch(lev+1, flow[TCA_FLOW_EMATCHES], "TCA_FLOW_EMATCHES"); if(flow[TCA_FLOW_PERTURB]) debug_rta_u32(lev+1, flow[TCA_FLOW_PERTURB], "TCA_FLOW_PERTURB", NULL); }