patch-2.0.31 linux/include/net/route.h
Next file: linux/include/net/sock.h
Previous file: linux/include/net/ipx.h
Back to the patch index
Back to the overall index
- Lines: 69
- Date:
Wed Oct 15 15:23:10 1997
- Orig file:
v2.0.30/linux/include/net/route.h
- Orig date:
Fri Mar 28 16:10:57 1997
diff -u --recursive --new-file v2.0.30/linux/include/net/route.h linux/include/net/route.h
@@ -13,6 +13,7 @@
* Alan Cox : Reformatted. Added ip_rt_local()
* Alan Cox : Support for TCP parameters.
* Alexey Kuznetsov: Major changes for new routing code.
+ * Elliot Poger : Added support for SO_BINDTODEVICE.
*
* FIXME:
* Make atomic ops more generic and hide them in asm/...
@@ -83,7 +84,8 @@
extern void ip_rt_flush(struct device *dev);
extern void ip_rt_update(int event, struct device *dev);
extern void ip_rt_redirect(__u32 src, __u32 dst, __u32 gw, struct device *dev);
-extern struct rtable *ip_rt_slow_route(__u32 daddr, int local);
+extern struct rtable *ip_rt_slow_route(__u32 daddr, int local, struct device *dev);
+extern struct device *ip_rt_dev(__u32 addr);
extern int rt_get_info(char * buffer, char **start, off_t offset, int length, int dummy);
extern int rt_cache_get_info(char *buffer, char **start, off_t offset, int length, int dummy);
extern int ip_rt_ioctl(unsigned int cmd, void *arg);
@@ -131,9 +133,9 @@
#endif
#ifdef CONFIG_KERNELD
-extern struct rtable * ip_rt_route(__u32 daddr, int local);
+extern struct rtable * ip_rt_route(__u32 daddr, int local, struct device *dev);
#else
-extern __inline__ struct rtable * ip_rt_route(__u32 daddr, int local)
+extern __inline__ struct rtable * ip_rt_route(__u32 daddr, int local, struct device *dev)
#ifndef MODULE
{
struct rtable * rth;
@@ -142,7 +144,8 @@
for (rth=ip_rt_hash_table[ip_rt_hash_code(daddr)^local]; rth; rth=rth->rt_next)
{
- if (rth->rt_dst == daddr)
+ /* If an interface is specified, make sure this route points to it. */
+ if ( (rth->rt_dst == daddr) && ((dev==NULL) || (dev==rth->rt_dev)) )
{
rth->rt_lastuse = jiffies;
atomic_inc(&rth->rt_use);
@@ -151,23 +154,23 @@
return rth;
}
}
- return ip_rt_slow_route (daddr, local);
+ return ip_rt_slow_route (daddr, local, dev);
}
#else
;
#endif
#endif
-extern __inline__ struct rtable * ip_check_route(struct rtable ** rp,
- __u32 daddr, int local)
+extern __inline__ struct rtable * ip_check_route(struct rtable ** rp, __u32 daddr,
+ int local, struct device *dev)
{
struct rtable * rt = *rp;
- if (!rt || rt->rt_dst != daddr || !(rt->rt_flags&RTF_UP)
+ if (!rt || rt->rt_dst != daddr || !(rt->rt_flags&RTF_UP) || (dev!=NULL)
|| ((local==1)^((rt->rt_flags&RTF_LOCAL) != 0)))
{
ip_rt_put(rt);
- rt = ip_rt_route(daddr, local);
+ rt = ip_rt_route(daddr, local, dev);
*rp = rt;
}
return rt;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov