|
@@ -170,8 +170,8 @@ static inline int ip_route_connect(struct rtable **rp, u32 dst,
|
|
|
return ip_route_output_flow(rp, &fl, sk, 0);
|
|
|
}
|
|
|
|
|
|
-static inline int ip_route_newports(struct rtable **rp, u16 sport, u16 dport,
|
|
|
- struct sock *sk)
|
|
|
+static inline int ip_route_newports(struct rtable **rp, u8 protocol,
|
|
|
+ u16 sport, u16 dport, struct sock *sk)
|
|
|
{
|
|
|
if (sport != (*rp)->fl.fl_ip_sport ||
|
|
|
dport != (*rp)->fl.fl_ip_dport) {
|
|
@@ -180,6 +180,7 @@ static inline int ip_route_newports(struct rtable **rp, u16 sport, u16 dport,
|
|
|
memcpy(&fl, &(*rp)->fl, sizeof(fl));
|
|
|
fl.fl_ip_sport = sport;
|
|
|
fl.fl_ip_dport = dport;
|
|
|
+ fl.proto = protocol;
|
|
|
ip_rt_put(*rp);
|
|
|
*rp = NULL;
|
|
|
return ip_route_output_flow(rp, &fl, sk, 0);
|