Lines Matching +full:current +full:- +full:rotate

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2019-2021 IKS Service GmbH
174 vrp->conf.max = NG_VLANROTATE_MAX_VLANS; in ng_vlanrotate_constructor()
176 vrp->stats.drops = counter_u64_alloc(M_WAITOK); in ng_vlanrotate_constructor()
177 vrp->stats.excessive = counter_u64_alloc(M_WAITOK); in ng_vlanrotate_constructor()
178 vrp->stats.incomplete = counter_u64_alloc(M_WAITOK); in ng_vlanrotate_constructor()
180 vrp->stats.histogram[i] = counter_u64_alloc(M_WAITOK); in ng_vlanrotate_constructor()
196 dst = &vrp->ordered_hook; in ng_vlanrotate_newhook()
198 dst = &vrp->original_hook; in ng_vlanrotate_newhook()
200 dst = &vrp->excessive_hook; in ng_vlanrotate_newhook()
202 dst = &vrp->incomplete_hook; in ng_vlanrotate_newhook()
228 switch (msg->header.typecookie) { in ng_vlanrotate_rcvmsg()
230 switch (msg->header.cmd) { in ng_vlanrotate_rcvmsg()
232 NG_MKRESPONSE(resp, msg, sizeof(vrp->conf), M_NOWAIT); in ng_vlanrotate_rcvmsg()
237 *((struct ng_vlanrotate_conf *)resp->data) = vrp->conf; in ng_vlanrotate_rcvmsg()
240 if (msg->header.arglen != sizeof(*pcf)) { in ng_vlanrotate_rcvmsg()
245 pcf = (struct ng_vlanrotate_conf *)msg->data; in ng_vlanrotate_rcvmsg()
247 if (pcf->max == 0) /* keep current value */ in ng_vlanrotate_rcvmsg()
248 pcf->max = vrp->conf.max; in ng_vlanrotate_rcvmsg()
250 if ((pcf->max > NG_VLANROTATE_MAX_VLANS) || in ng_vlanrotate_rcvmsg()
251 (pcf->min > pcf->max) || in ng_vlanrotate_rcvmsg()
252 (abs(pcf->rot) >= pcf->max)) { in ng_vlanrotate_rcvmsg()
257 vrp->conf = *pcf; in ng_vlanrotate_rcvmsg()
270 p = (struct ng_vlanrotate_stat *)resp->data; in ng_vlanrotate_rcvmsg()
271 p->drops = counter_u64_fetch(vrp->stats.drops); in ng_vlanrotate_rcvmsg()
272 p->excessive = counter_u64_fetch(vrp->stats.excessive); in ng_vlanrotate_rcvmsg()
273 p->incomplete = counter_u64_fetch(vrp->stats.incomplete); in ng_vlanrotate_rcvmsg()
275 p->histogram[i] = counter_u64_fetch(vrp->stats.histogram[i]); in ng_vlanrotate_rcvmsg()
276 if (msg->header.cmd != NGM_VLANROTATE_GETCLR_STAT) in ng_vlanrotate_rcvmsg()
283 counter_u64_zero(vrp->stats.drops); in ng_vlanrotate_rcvmsg()
284 counter_u64_zero(vrp->stats.excessive); in ng_vlanrotate_rcvmsg()
285 counter_u64_zero(vrp->stats.incomplete); in ng_vlanrotate_rcvmsg()
287 counter_u64_zero(vrp->stats.histogram[i]); in ng_vlanrotate_rcvmsg()
308 * Receive data, and do rotate the vlans as desired.
316 * -----
317 * 34012 +2 rotate
318 * 12340 +4 rotate
319 * 12340 -1 rotate
351 for (i = ng_vlanrotate_gcd(d, n); i-- > 0;) { in ng_vlanrotate_rotate()
352 /* rotate left aka downwards */ in ng_vlanrotate_rotate()
359 k = k - n; in ng_vlanrotate_rotate()
377 int8_t rotate; in ng_vlanrotate_rcvdata() local
383 if (hook == vrp->ordered_hook) { in ng_vlanrotate_rcvdata()
384 rotate = +vrp->conf.rot; in ng_vlanrotate_rcvdata()
385 dst_hook = vrp->original_hook; in ng_vlanrotate_rcvdata()
386 } else if (hook == vrp->original_hook) { in ng_vlanrotate_rcvdata()
387 rotate = -vrp->conf.rot; in ng_vlanrotate_rcvdata()
388 dst_hook = vrp->ordered_hook; in ng_vlanrotate_rcvdata()
390 dst_hook = vrp->original_hook; in ng_vlanrotate_rcvdata()
404 if (m->m_len < expected_len) { in ng_vlanrotate_rcvdata()
413 switch (ntohs(evsh->vlan_stack[vlans].proto)) { in ng_vlanrotate_rcvdata()
425 if ((vlans > vrp->conf.max) || (vlans >= NG_VLANROTATE_MAX_VLANS)) { in ng_vlanrotate_rcvdata()
426 counter_u64_add(vrp->stats.excessive, 1); in ng_vlanrotate_rcvdata()
427 dst_hook = vrp->excessive_hook; in ng_vlanrotate_rcvdata()
431 if ((vlans < vrp->conf.min) || (vlans <= abs(rotate))) { in ng_vlanrotate_rcvdata()
432 counter_u64_add(vrp->stats.incomplete, 1); in ng_vlanrotate_rcvdata()
433 dst_hook = vrp->incomplete_hook; in ng_vlanrotate_rcvdata()
436 counter_u64_add(vrp->stats.histogram[vlans], 1); in ng_vlanrotate_rcvdata()
439 if (rotate == 0) { in ng_vlanrotate_rcvdata()
441 } else if (rotate > 0) { in ng_vlanrotate_rcvdata()
442 ng_vlanrotate_rotate(evsh->vlan_stack, rotate, vlans); in ng_vlanrotate_rcvdata()
444 ng_vlanrotate_rotate(evsh->vlan_stack, vlans + rotate, vlans); in ng_vlanrotate_rcvdata()
454 counter_u64_add(vrp->stats.drops, 1); in ng_vlanrotate_rcvdata()
473 counter_u64_free(vrp->stats.drops); in ng_vlanrotate_shutdown()
474 counter_u64_free(vrp->stats.excessive); in ng_vlanrotate_shutdown()
475 counter_u64_free(vrp->stats.incomplete); in ng_vlanrotate_shutdown()
477 counter_u64_free(vrp->stats.histogram[i]); in ng_vlanrotate_shutdown()
494 if (vrp->original_hook == hook) in ng_vlanrotate_disconnect()
495 vrp->original_hook = NULL; in ng_vlanrotate_disconnect()
496 if (vrp->ordered_hook == hook) in ng_vlanrotate_disconnect()
497 vrp->ordered_hook = NULL; in ng_vlanrotate_disconnect()
498 if (vrp->excessive_hook == hook) in ng_vlanrotate_disconnect()
499 vrp->excessive_hook = NULL; in ng_vlanrotate_disconnect()
500 if (vrp->incomplete_hook == hook) in ng_vlanrotate_disconnect()
501 vrp->incomplete_hook = NULL; in ng_vlanrotate_disconnect()