Re: libnl-route to implement ip route get

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jul 18, 2018 at 10:10 AM, Bednár Martin <martin@xxxxxxxxxxx> wrote:
>
> Hi,
>
> I'm trying to implement `ip route get x.x.x.x` functionality in C.
> I understand this command asks the kernel to resolve the route/gateway
> for a concrete address and report it to userspace. Please correct me if
> I'm wrong.
>
> I'm trying to do this in C using the libnl-route API, but don't see any
> combination of functions to achieve it.
> I have managed to get the default route by filtering a zero address from
> the cache. But I'm stumped at submitting a concrete address to look up...
> Could anyone point me in the right direction?
>

Hi!

I've recently implemented such feature in my code using libmnl and
following this example:

http://git.netfilter.org/libmnl/tree/examples/rtnl/rtnl-route-dump.c

Firstly, you've to create a header with type RTM_GETROUTE and flag
NLM_F_REQUEST.

Later, an extra header like:

rtm->rtm_family = AF_INET;
rtm->rtm_dst_len = 32;
rtm->rtm_src_len = 0;
rtm->rtm_tos = 0;
rtm->rtm_protocol = RTPROT_UNSPEC;
rtm->rtm_table = RT_TABLE_UNSPEC;
rtm->rtm_type = RTN_UNSPEC;
rtm->rtm_scope = RT_SCOPE_UNIVERSE;
rtm->rtm_flags = RTM_F_LOOKUP_TABLE;

And finally, add an attribute with mnl_attr_put() inserting the
RTA_DST with the destination IP address.

All this will generate a netlink request that gets the routing info
for such destination address.

Hope this helps,
Regards!
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux