Lines Matching +full:ts +full:- +full:attached
5 /*-
25 * PURPOSE, OR NON-INFRINGEMENT. SANDVINE DOES NOT WARRANT, GUARANTEE, OR
52 * self-re-enqueue packets (e.g. the if_bge driver could reuse the same
285 sc->node = node; in ng_source_constructor()
286 mbufq_init(&sc->snd_queue, 2048); in ng_source_constructor()
287 ng_callout_init(&sc->intr_ch); in ng_source_constructor()
301 sc->input = hook; in ng_source_newhook()
303 sc->output = hook; in ng_source_newhook()
304 sc->output_ifp = NULL; in ng_source_newhook()
305 bzero(&sc->stats, sizeof(sc->stats)); in ng_source_newhook()
326 if (hook == sc->output) { in ng_source_connect()
336 NG_SEND_MSG_ID(dummy_error, sc->node, msg, in ng_source_connect()
337 NG_NODE_ID(NG_PEER_NODE(sc->output)), NG_NODE_ID(sc->node)); in ng_source_connect()
355 switch (msg->header.typecookie) { in ng_source_rcvmsg()
357 if (msg->header.flags & NGF_RESP) { in ng_source_rcvmsg()
361 switch (msg->header.cmd) { in ng_source_rcvmsg()
368 if (msg->header.cmd != NGM_SOURCE_CLR_STATS) { in ng_source_rcvmsg()
375 sc->stats.queueOctets = sc->queueOctets; in ng_source_rcvmsg()
376 sc->stats.queueFrames = mbufq_len(&sc->snd_queue); in ng_source_rcvmsg()
377 if ((sc->node->nd_flags & NG_SOURCE_ACTIVE) in ng_source_rcvmsg()
378 && !timevalisset(&sc->stats.endTime)) { in ng_source_rcvmsg()
379 getmicrotime(&sc->stats.elapsedTime); in ng_source_rcvmsg()
380 timevalsub(&sc->stats.elapsedTime, in ng_source_rcvmsg()
381 &sc->stats.startTime); in ng_source_rcvmsg()
383 stats = (struct ng_source_stats *)resp->data; in ng_source_rcvmsg()
384 bcopy(&sc->stats, stats, sizeof(* stats)); in ng_source_rcvmsg()
386 if (msg->header.cmd != NGM_SOURCE_GET_STATS) in ng_source_rcvmsg()
387 bzero(&sc->stats, sizeof(sc->stats)); in ng_source_rcvmsg()
394 if (msg->header.arglen != sizeof(uint64_t)) { in ng_source_rcvmsg()
399 packets = *(uint64_t *)msg->data; in ng_source_rcvmsg()
413 char *ifname = (char *)msg->data; in ng_source_rcvmsg()
415 if (msg->header.arglen < 2) { in ng_source_rcvmsg()
427 if (msg->header.arglen != sizeof(uint32_t)) { in ng_source_rcvmsg()
432 pps = *(uint32_t *)msg->data; in ng_source_rcvmsg()
434 sc->stats.maxPps = pps; in ng_source_rcvmsg()
442 if (msg->header.arglen != sizeof(*embed)) { in ng_source_rcvmsg()
446 embed = (struct ng_source_embed_info *)msg->data; in ng_source_rcvmsg()
447 bcopy(embed, &sc->embed_timestamp, sizeof(*embed)); in ng_source_rcvmsg()
460 embed = (struct ng_source_embed_info *)resp->data; in ng_source_rcvmsg()
461 bcopy(&sc->embed_timestamp, embed, sizeof(*embed)); in ng_source_rcvmsg()
469 if (msg->header.arglen != sizeof(*embed)) { in ng_source_rcvmsg()
473 embed = (struct ng_source_embed_cnt_info *)msg->data; in ng_source_rcvmsg()
474 if (embed->index >= NG_SOURCE_COUNTERS || in ng_source_rcvmsg()
475 !(embed->width == 1 || embed->width == 2 || in ng_source_rcvmsg()
476 embed->width == 4)) { in ng_source_rcvmsg()
480 bcopy(embed, &sc->embed_counter[embed->index], in ng_source_rcvmsg()
487 uint8_t index = *(uint8_t *)msg->data; in ng_source_rcvmsg()
499 embed = (struct ng_source_embed_cnt_info *)resp->data; in ng_source_rcvmsg()
500 bcopy(&sc->embed_counter[index], embed, sizeof(*embed)); in ng_source_rcvmsg()
510 if (!(msg->header.flags & NGF_RESP)) { in ng_source_rcvmsg()
514 switch (msg->header.cmd) { in ng_source_rcvmsg()
517 char *ifname = (char *)msg->data; in ng_source_rcvmsg()
519 if (msg->header.arglen < 2) { in ng_source_rcvmsg()
562 if (hook == sc->output) { in ng_source_rcvdata()
567 KASSERT(hook == sc->input, ("%s: no hook!", __func__)); in ng_source_rcvdata()
570 error = mbufq_enqueue(&sc->snd_queue, m); in ng_source_rcvdata()
575 sc->queueOctets += m->m_pkthdr.len; in ng_source_rcvdata()
576 sc->last_packet = m; in ng_source_rcvdata()
608 if (NG_NODE_NUMHOOKS(NG_HOOK_NODE(hook)) == 0 || hook == sc->output) in ng_source_disconnect()
614 * Set sc->output_ifp to point to the struct ifnet of the interface
628 sc->output_ifp = ifp; in ng_source_store_output_ifp()
636 if (ifp->if_snd.ifq_maxlen < NG_SOURCE_DRIVER_IFQ_MAXLEN) { in ng_source_store_output_ifp()
638 ifp->if_snd.ifq_maxlen, NG_SOURCE_DRIVER_IFQ_MAXLEN); in ng_source_store_output_ifp()
639 ifp->if_snd.ifq_maxlen = NG_SOURCE_DRIVER_IFQ_MAXLEN; in ng_source_store_output_ifp()
646 * Set the attached ethernet node's ethernet source address override flag.
659 *(uint32_t *)msg->data = flag; in ng_source_set_autosrc()
660 NG_SEND_MSG_HOOK(error, sc->node, msg, sc->output, 0); in ng_source_set_autosrc()
673 m = mbufq_dequeue(&sc->snd_queue); in ng_source_clr_data()
678 sc->queueOctets = 0; in ng_source_clr_data()
679 sc->last_packet = NULL; in ng_source_clr_data()
688 if (sc->output_ifp == NULL && sc->stats.maxPps == 0) { in ng_source_start()
693 if (sc->node->nd_flags & NG_SOURCE_ACTIVE) in ng_source_start()
696 sc->node->nd_flags |= NG_SOURCE_ACTIVE; in ng_source_start()
698 sc->packets = packets; in ng_source_start()
699 timevalclear(&sc->stats.elapsedTime); in ng_source_start()
700 timevalclear(&sc->stats.endTime); in ng_source_start()
701 getmicrotime(&sc->stats.startTime); in ng_source_start()
702 getmicrotime(&sc->stats.lastTime); in ng_source_start()
703 ng_callout(&sc->intr_ch, sc->node, NULL, 0, in ng_source_start()
715 ng_uncallout(&sc->intr_ch, sc->node); in ng_source_stop()
716 sc->node->nd_flags &= ~NG_SOURCE_ACTIVE; in ng_source_stop()
717 getmicrotime(&sc->stats.endTime); in ng_source_stop()
718 sc->stats.elapsedTime = sc->stats.endTime; in ng_source_stop()
719 timevalsub(&sc->stats.elapsedTime, &sc->stats.startTime); in ng_source_stop()
736 if (sc->packets == 0 || sc->output == NULL in ng_source_intr()
737 || (sc->node->nd_flags & NG_SOURCE_ACTIVE) == 0) { in ng_source_intr()
742 if (sc->output_ifp != NULL) { in ng_source_intr()
743 ifq = (struct ifqueue *)&sc->output_ifp->if_snd; in ng_source_intr()
744 packets = ifq->ifq_maxlen - ifq->ifq_len; in ng_source_intr()
746 packets = mbufq_len(&sc->snd_queue); in ng_source_intr()
748 if (sc->stats.maxPps != 0) { in ng_source_intr()
755 timevalsub(&elapsed, &sc->stats.lastTime); in ng_source_intr()
757 maxpkt = (uint64_t)sc->stats.maxPps * usec / 1000000; in ng_source_intr()
758 sc->stats.lastTime = now; in ng_source_intr()
764 if (sc->packets == 0) in ng_source_intr()
767 ng_callout(&sc->intr_ch, node, NULL, NG_SOURCE_INTR_TICKS, in ng_source_intr()
782 KASSERT(sc->node->nd_flags & NG_SOURCE_ACTIVE, in ng_source_send()
785 if ((uint64_t)tosend > sc->packets) in ng_source_send()
786 tosend = sc->packets; in ng_source_send()
790 m = mbufq_dequeue(&sc->snd_queue); in ng_source_send()
798 mbufq_prepend(&sc->snd_queue, m); in ng_source_send()
800 (void)mbufq_enqueue(&sc->snd_queue, m); in ng_source_send()
805 * Re-enqueue the original packet for us. The queue in ng_source_send()
810 error = mbufq_enqueue(&sc->snd_queue, m); in ng_source_send()
811 KASSERT(error == 0, ("%s: re-enqueue packet failed", __func__)); in ng_source_send()
813 sc->stats.outFrames++; in ng_source_send()
814 sc->stats.outOctets += m2->m_pkthdr.len; in ng_source_send()
815 NG_SEND_DATA_ONLY(error, sc->output, m2); in ng_source_send()
820 sc->packets -= sent; in ng_source_send()
841 if (offset + len > m->m_len) in ng_source_packet_mod()
854 val = htonl(cnt->next_val); in ng_source_mod_counter()
855 cp = (caddr_t)&val + sizeof(val) - cnt->width; in ng_source_mod_counter()
856 ng_source_packet_mod(sc, m, cnt->offset, cnt->width, cp, cnt->flags); in ng_source_mod_counter()
859 cnt->next_val += increment; in ng_source_mod_counter()
861 if (increment > 0 && cnt->next_val > cnt->max_val) { in ng_source_mod_counter()
862 cnt->next_val = cnt->min_val - 1 + in ng_source_mod_counter()
863 (cnt->next_val - cnt->max_val); in ng_source_mod_counter()
864 if (cnt->next_val > cnt->max_val) in ng_source_mod_counter()
865 cnt->next_val = cnt->max_val; in ng_source_mod_counter()
866 } else if (increment < 0 && cnt->next_val < cnt->min_val) { in ng_source_mod_counter()
867 cnt->next_val = cnt->max_val + 1 + in ng_source_mod_counter()
868 (cnt->next_val - cnt->min_val); in ng_source_mod_counter()
869 if (cnt->next_val < cnt->min_val) in ng_source_mod_counter()
870 cnt->next_val = cnt->max_val; in ng_source_mod_counter()
880 struct ng_source_embed_info *ts; in ng_source_dup_mod() local
886 modify = sc->embed_timestamp.flags & NGM_SOURCE_EMBED_ENABLE; in ng_source_dup_mod()
888 modify = sc->embed_counter[i].flags & NGM_SOURCE_EMBED_ENABLE; in ng_source_dup_mod()
908 cnt = &sc->embed_counter[i]; in ng_source_dup_mod()
909 if (cnt->flags & NGM_SOURCE_EMBED_ENABLE) { in ng_source_dup_mod()
910 if ((cnt->flags & NGM_SOURCE_INC_CNT_PER_LIST) == 0 || in ng_source_dup_mod()
911 sc->last_packet == m0) in ng_source_dup_mod()
912 increment = cnt->increment; in ng_source_dup_mod()
919 ts = &sc->embed_timestamp; in ng_source_dup_mod()
920 if (ts->flags & NGM_SOURCE_EMBED_ENABLE) { in ng_source_dup_mod()
925 ng_source_packet_mod(sc, m, ts->offset, sizeof (now), in ng_source_dup_mod()
926 (caddr_t)&now, ts->flags); in ng_source_dup_mod()