Lines Matching defs:tcm
596 struct trtcm *tcm = NULL;
603 if ((tcm = cdnr_cballoc(top, TCETYPE_TRTCM,
607 tb_import_profile(&tcm->cmtd_tb, cmtd_profile);
608 tb_import_profile(&tcm->peak_tb, peak_profile);
610 tca_import_action(&tcm->green_action, green_action);
611 tca_import_action(&tcm->yellow_action, yellow_action);
612 tca_import_action(&tcm->red_action, red_action);
615 if (tcm->green_action.tca_code == TCACODE_MARK)
616 tcm->green_dscp = tcm->green_action.tca_dscp & DSCP_MASK;
618 tcm->green_dscp = DSCP_AF11;
619 if (tcm->yellow_action.tca_code == TCACODE_MARK)
620 tcm->yellow_dscp = tcm->yellow_action.tca_dscp & DSCP_MASK;
622 tcm->yellow_dscp = DSCP_AF12;
623 if (tcm->red_action.tca_code == TCACODE_MARK)
624 tcm->red_dscp = tcm->red_action.tca_dscp & DSCP_MASK;
626 tcm->red_dscp = DSCP_AF13;
628 tcm->coloraware = coloraware;
630 return tcm;
634 trtcm_destroy(struct trtcm *tcm)
636 if (tcm->cdnrblk.cb_ref > 0)
639 tca_invalidate_action(&tcm->green_action);
640 tca_invalidate_action(&tcm->yellow_action);
641 tca_invalidate_action(&tcm->red_action);
643 cdnr_cbdestroy(tcm);
650 struct trtcm *tcm = (struct trtcm *)cb;
656 if (tcm->coloraware) {
658 if (color != tcm->yellow_dscp && color != tcm->red_dscp)
659 color = tcm->green_dscp;
662 color = tcm->green_dscp;
666 if (tcm->cmtd_tb.token < len) {
667 interval = now - tcm->cmtd_tb.last;
668 if (interval >= tcm->cmtd_tb.filluptime)
669 tcm->cmtd_tb.token = tcm->cmtd_tb.depth;
671 tcm->cmtd_tb.token += interval * tcm->cmtd_tb.rate;
672 if (tcm->cmtd_tb.token > tcm->cmtd_tb.depth)
673 tcm->cmtd_tb.token = tcm->cmtd_tb.depth;
675 tcm->cmtd_tb.last = now;
677 if (tcm->peak_tb.token < len) {
678 interval = now - tcm->peak_tb.last;
679 if (interval >= tcm->peak_tb.filluptime)
680 tcm->peak_tb.token = tcm->peak_tb.depth;
682 tcm->peak_tb.token += interval * tcm->peak_tb.rate;
683 if (tcm->peak_tb.token > tcm->peak_tb.depth)
684 tcm->peak_tb.token = tcm->peak_tb.depth;
686 tcm->peak_tb.last = now;
689 if (color == tcm->red_dscp || tcm->peak_tb.token < len) {
690 pktinfo->pkt_dscp = tcm->red_dscp;
691 PKTCNTR_ADD(&tcm->red_cnt, pktinfo->pkt_len);
692 return (&tcm->red_action);
695 if (color == tcm->yellow_dscp || tcm->cmtd_tb.token < len) {
696 pktinfo->pkt_dscp = tcm->yellow_dscp;
697 tcm->peak_tb.token -= len;
698 PKTCNTR_ADD(&tcm->yellow_cnt, pktinfo->pkt_len);
699 return (&tcm->yellow_action);
702 pktinfo->pkt_dscp = tcm->green_dscp;
703 tcm->cmtd_tb.token -= len;
704 tcm->peak_tb.token -= len;
705 PKTCNTR_ADD(&tcm->green_cnt, pktinfo->pkt_len);
706 return (&tcm->green_action);
973 struct trtcm *tcm;
978 tcm = trtcm_create(top, &ap->cmtd_profile, &ap->peak_profile,
981 if (tcm == NULL)
985 ap->cdnr_handle = cdnr_cb2handle(&tcm->cdnrblk);
992 struct trtcm *tcm;
994 if ((tcm = (struct trtcm *)cdnr_handle2cb(ap->cdnr_handle)) == NULL)
997 tb_import_profile(&tcm->cmtd_tb, &ap->cmtd_profile);
998 tb_import_profile(&tcm->peak_tb, &ap->peak_profile);
1012 struct trtcm *tcm = (struct trtcm *)cb;
1014 ap->green_cnt = tcm->green_cnt;
1015 ap->yellow_cnt = tcm->yellow_cnt;
1016 ap->red_cnt = tcm->red_cnt;
1080 struct trtcm *tcm;
1115 tcm = (struct trtcm *)cb;
1116 tce.tce_cnts[0] = tcm->green_cnt;
1117 tce.tce_cnts[1] = tcm->yellow_cnt;
1118 tce.tce_cnts[2] = tcm->red_cnt;