Esempio n. 1
0
void kaodv_update_route_timeouts(int hooknum, const struct net_device *dev,
				 struct iphdr *iph)
{
	struct expl_entry e;
	struct in_addr bcaddr;
	int res;

	bcaddr.s_addr = 0; /* Stop compiler from complaining about
			    * uninitialized bcaddr */

	res = if_info_from_ifindex(NULL, &bcaddr, dev->ifindex);

	if (res < 0)
		return;

	if (hooknum == NF_INET_PRE_ROUTING)
		kaodv_netlink_send_rt_update_msg(PKT_INBOUND, iph->saddr,
						 iph->daddr, dev->ifindex);
	else if (iph->daddr != INADDR_BROADCAST && iph->daddr != bcaddr.s_addr)
		kaodv_netlink_send_rt_update_msg(PKT_OUTBOUND, iph->saddr,
						 iph->daddr, dev->ifindex);

	/* First update forward route and next hop */
	if (kaodv_expl_get(iph->daddr, &e)) {

		kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
				  e.flags, dev->ifindex);

		if (e.nhop != e.daddr && kaodv_expl_get(e.nhop, &e))
			kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
					  e.flags, dev->ifindex);
	}
	/* Update reverse route */
	if (kaodv_expl_get(iph->saddr, &e)) {

		kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
				  e.flags, dev->ifindex);

		if (e.nhop != e.daddr && kaodv_expl_get(e.nhop, &e))
			kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
					  e.flags, dev->ifindex);
	}
}
Esempio n. 2
0
static void
kaodv_update_route_timeouts(int hooknum, const struct net_device *dev,
			    struct iphdr *iph)
{
	struct expl_entry e;
	struct netdev_info *netdi;

	netdi = netdev_info_from_ifindex(dev->ifindex);

	if (!netdi)
		return;

	if (hooknum == NF_IP_PRE_ROUTING)
		kaodv_netlink_send_rt_update_msg(PKT_INBOUND, iph->saddr,
						 iph->daddr, dev->ifindex);
	else if (iph->daddr != INADDR_BROADCAST && iph->daddr != netdi->bc_addr)
		kaodv_netlink_send_rt_update_msg(PKT_OUTBOUND, iph->saddr,
						 iph->daddr, dev->ifindex);

	/* First update forward route and next hop */
	if (kaodv_expl_get(iph->daddr, &e)) {

		kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
				  e.flags);

		if (e.nhop != e.daddr && kaodv_expl_get(e.nhop, &e))
			kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
					  e.flags);
	}
	/* Update reverse route */
	if (kaodv_expl_get(iph->saddr, &e)) {

		kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
				  e.flags);

		if (e.nhop != e.daddr && kaodv_expl_get(e.nhop, &e))
			kaodv_expl_update(e.daddr, e.nhop, ACTIVE_ROUTE_TIMEOUT,
					  e.flags);

	}
}