• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/netgraph/

Lines Matching defs:mfp

279  * Resize the MAC table to accommodate at least mfp->mf_mac_used + 1 entries.
284 macfilter_mactable_resize(macfilter_p mfp)
288 int n = mfp->mf_mac_allocated;
289 if (mfp->mf_mac_used < 2*MACTABLE_BLOCKSIZE-1) /* minimum size */
291 else if (mfp->mf_mac_used + 2*MACTABLE_BLOCKSIZE < mfp->mf_mac_allocated) /* reduce size */
292 n = mfp->mf_mac_allocated - MACTABLE_BLOCKSIZE;
293 else if (mfp->mf_mac_used == mfp->mf_mac_allocated) /* increase size */
294 n = mfp->mf_mac_allocated + MACTABLE_BLOCKSIZE;
296 if (n != mfp->mf_mac_allocated) {
298 mfp->mf_mac_used, mfp->mf_mac_allocated, n);
300 mf_mac_p mfp_new = realloc(mfp->mf_macs,
301 sizeof(mfp->mf_macs[0])*n,
306 mfp->mf_macs = mfp_new;
307 mfp->mf_mac_allocated = n;
321 macfilter_reset(macfilter_p mfp)
323 mfp->mf_mac_used = 0;
325 macfilter_mactable_resize(mfp);
334 macfilter_reset_stats(macfilter_p mfp)
338 for (i = 0; i < mfp->mf_mac_used; i++) {
339 mf_mac_p p = &mfp->mf_macs[i];
351 macfilter_mac_count(macfilter_p mfp, int hookid)
356 for (i = 0; i < mfp->mf_mac_used; i++)
357 if (mfp->mf_macs[i].hookid == hookid)
373 macfilter_find_mac(macfilter_p mfp, const u_char *ether, u_int *ri)
375 mf_mac_p mf_macs = mfp->mf_macs;
378 u_int range = mfp->mf_mac_used;
406 macfilter_mactable_change(macfilter_p mfp, u_char *ether, int hookid)
409 int found = macfilter_find_mac(mfp, ether, &i);
411 mf_mac_p mf_macs = mfp->mf_macs;
416 mfp->mf_mac_used, mfp->mf_mac_allocated);
421 mfp->mf_mac_used--;
422 size_t len = (mfp->mf_mac_used - i) * sizeof(mf_macs[0]);
426 macfilter_mactable_resize(mfp);
435 if (macfilter_mactable_resize(mfp) == -1) {
438 mf_macs = mfp->mf_macs; /* reassign; might have moved during resize */
441 size_t len = (mfp->mf_mac_used - i) * sizeof(mf_macs[0]);
448 mfp->mf_mac_used++;
457 macfilter_mactable_remove_by_hookid(macfilter_p mfp, int hookid)
461 for (i = 0, j = 0; i < mfp->mf_mac_used; i++) {
462 if (mfp->mf_macs[i].hookid != hookid) {
464 bcopy(&mfp->mf_macs[i], &mfp->mf_macs[j], sizeof(mfp->mf_macs[0]));
470 mfp->mf_mac_used = j;
471 macfilter_mactable_resize(mfp);
477 macfilter_find_hook(macfilter_p mfp, const char *hookname)
481 for (hookid = 0; hookid < mfp->mf_upper_cnt; hookid++) {
482 if (mfp->mf_upper[hookid]) {
483 if (strncmp(NG_HOOK_NAME(mfp->mf_upper[hookid]),
494 macfilter_direct(macfilter_p mfp, struct ngm_macfilter_direct *md)
499 int hookid = macfilter_find_hook(mfp, md->hookname);
503 return macfilter_mactable_change(mfp, md->ether, hookid);
507 macfilter_direct_hookid(macfilter_p mfp, struct ngm_macfilter_direct_hookid *mdi)
512 if (mdi->hookid >= mfp->mf_upper_cnt)
514 else if (mfp->mf_upper[mdi->hookid] == NULL)
517 return macfilter_mactable_change(mfp, mdi->ether, mdi->hookid);
529 macfilter_ether_output(hook_p hook, macfilter_p mfp, struct mbuf *m, hook_p *next_hook)
534 *next_hook = mfp->mf_ether_hook;
536 mtx_lock(&mfp->mtx);
539 int found = macfilter_find_mac(mfp, ether, &i);
541 mf_mac_p mf_macs = mfp->mf_macs;
560 mtx_unlock(&mfp->mtx);
570 macfilter_ether_input(hook_p hook, macfilter_p mfp, struct mbuf *m, hook_p *next_hook)
576 mtx_lock(&mfp->mtx);
579 int found = macfilter_find_mac(mfp, ether, &i);
581 mf_mac_p mf_macs = mfp->mf_macs;
602 if (hookid >= mfp->mf_upper_cnt)
605 *next_hook = mfp->mf_upper[hookid];
607 mtx_unlock(&mfp->mtx);
625 macfilter_p mfp = malloc(sizeof(*mfp), M_NETGRAPH, M_NOWAIT | M_ZERO);
626 if (mfp == NULL)
629 int error = macfilter_mactable_resize(mfp);
633 NG_NODE_SET_PRIVATE(node, mfp);
635 mtx_init(&mfp->mtx, "Macfilter table", NULL, MTX_DEF);
643 const macfilter_p mfp = NG_NODE_PRIVATE(node);
648 mfp->mf_ether_hook = hook;
654 for (hookid = 1; hookid < mfp->mf_upper_cnt; hookid++)
655 if (mfp->mf_upper[hookid] == NULL)
659 if (hookid >= mfp->mf_upper_cnt) {
660 MACFILTER_DEBUG("upper cnt %d -> %d", mfp->mf_upper_cnt, hookid + 1);
662 mfp->mf_upper_cnt = hookid + 1;
663 mfp->mf_upper = realloc(mfp->mf_upper,
664 sizeof(mfp->mf_upper[0])*mfp->mf_upper_cnt,
668 mfp->mf_upper[hookid] = hook;
677 const macfilter_p mfp = NG_NODE_PRIVATE(node);
691 mtx_lock(&mfp->mtx);
698 macfilter_reset(mfp);
709 error = macfilter_direct(mfp, md);
719 error = macfilter_direct_hookid(mfp, mdi);
724 n = mfp->mf_mac_used;
733 bcopy(mfp->mf_macs, &ngm_macs->macs[0], n * sizeof(struct ngm_macfilter_mac));
736 macfilter_reset_stats(mfp);
740 macfilter_reset_stats(mfp);
744 for (hookid = 0; hookid < mfp->mf_upper_cnt; hookid++)
745 if (mfp->mf_upper[hookid] != NULL)
756 for (hookid = 0; hookid < mfp->mf_upper_cnt; hookid++) {
757 if (mfp->mf_upper[hookid] != NULL) {
760 NG_HOOK_NAME(mfp->mf_upper[hookid]),
763 ngm_hook->maccnt = macfilter_mac_count(mfp, hookid);
779 mtx_unlock(&mfp->mtx);
790 const macfilter_p mfp = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
798 if (hook == mfp->mf_ether_hook)
799 error = macfilter_ether_input(hook, mfp, m, &next_hook);
800 else if (mfp->mf_ether_hook != NULL)
801 error = macfilter_ether_output(hook, mfp, m, &next_hook);
816 const macfilter_p mfp = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
818 mtx_lock(&mfp->mtx);
820 if (mfp->mf_ether_hook == hook) {
821 mfp->mf_ether_hook = NULL;
827 for (hookid = 0; hookid < mfp->mf_upper_cnt; hookid++) {
828 if (mfp->mf_upper[hookid] == hook) {
829 mfp->mf_upper[hookid] = NULL;
832 macfilter_mactable_remove_by_hookid(mfp, hookid);
834 int cnt = macfilter_mactable_remove_by_hookid(mfp, hookid);
842 if (hookid == mfp->mf_upper_cnt - 1) {
844 for (--hookid; hookid >= 0 && mfp->mf_upper[hookid] == NULL; hookid--)
847 MACFILTER_DEBUG("upper cnt %d -> %d", mfp->mf_upper_cnt, hookid + 1);
848 mfp->mf_upper_cnt = hookid + 1;
849 mfp->mf_upper = realloc(mfp->mf_upper,
850 sizeof(mfp->mf_upper[0])*mfp->mf_upper_cnt,
855 mtx_unlock(&mfp->mtx);
868 const macfilter_p mfp = NG_NODE_PRIVATE(node);
870 mtx_destroy(&mfp->mtx);
871 free(mfp->mf_upper, M_NETGRAPH);
872 free(mfp->mf_macs, M_NETGRAPH);
873 free(mfp, M_NETGRAPH);