How to make netmap NS_FORWARD work with NR_REG_ONE_NIC?
Mark Delany
c2h at romeo.emu.st
Mon Mar 24 15:45:31 UTC 2014
(Very recent fbsd10)
My application is taking advantage of NR_REG_ONE_NIC to register
separate handlers for each h/w ring. (Pro tip, you must re-open
/dev/netmap each time, a dup() fd doesn't work).
While good for performance, it unfortunately appears that NS_FORWARD
does not work in this mode - presumably because NR_REG_ONE_NIC doesn't
include the host ring.
Now it's possible I simply have a bug and NS_FORWARD should work with
NR_REG_ONE_NIC - I have demo code I can share if needed - but assuming
for a moment I don't have a bug...
What's the right way to implement host forwarding with NR_REG_ONE_NIC?
Do I have to register an independent handler with NR_REG_SW_NIC and
have the h/w ring handlers synchronize with it? If so, I also presume
the NR_REG_SW_NIC handler has to manage transfers in both directions,
yes?
I'm not keen on that approach if I can avoid it as it introduces
synchronization costs between handlers where previously I needed none.
I also looked at the kernel module and determined that nr_flags =
NR_REG_ONE_NIC | NR_REG_SW_NIC is invalid. Oh well. That would have
solved my problem nicely.
Mark.
More information about the freebsd-net
mailing list