On Tue, Jan 27, 2026 at 7:00 PM Zhenlei Huang <[email protected]> wrote:
>
>
>
> > On Jan 28, 2026, at 8:03 AM, Rick Macklem <[email protected]> wrote:
> >
> > Hi,
> >
> > Basically, the subject line says it all.
> >
> > I am wondering if the NFS/krpc code (send side) can
> > determine what NIC will be used to send the RPC message.
> >
> > Why?
> >
> > Right now, the NFS code fills the RPC message into
> > M_EXTPG mbufs for the KTLS case only.
> > However, some NICs (Chelsio and Mellanox?) can
> > handle M_EXTPG mbufs, as indicated by the
> > IFCAP_MEXTPG flag being set.
> >
> > As such, it would be nice if the NFS/krpc code could
> > determine if IFCAP_MEXTPG is set, so that it can
> > use M_EXTPG mbufs.
> > --> Yes, for other NICs, the mbuf chain will be copied
> >      in ip_output() by calling mb_unmapped_to_ext(),
> >      so they work, but I don't see any reason to fill the
> >      RPC message into M_EXTPG mbufs if ip_output()
> >      just ends up copying them?
> >
> > The NFS/krpc code does know the IP host address of the
> > other end, so I think the question becomes "can the NFS/krpc
> > code do a routing call to find out what NIC will be used?".
>
> Given the dest IP address is known, you can find the nexthop
> info from fib4_lookup() and then extract the ifnet from the nexthop
> info. The usage of fib4_lookup() in ip_output() is a good example.
Thanks! It seems to work for a simple test case.

However, I do have a couple of questions.
My test uses so_fibnum and inp_flowid. Are these the correct place
to get these arguments, when done on a TCP socket just after a connect?

And for IPv6, I assume I use fib6_lookup()?
--> My question is, do I first call in6_splitscope() to get the correct address
     argument and scopeid? (I know nothing about IPv6;-)
     (I don't even know if the destination address for an NFS connection will
      have a scopeid?)

Thanks for your help, rick

>
> >
> > Thanks for any info, rick
> >
> > Thanks for any info, rick
> >
>
> Best regards,
> Zhenlei
>

Reply via email to