|
@@ -1570,25 +1570,6 @@ static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-/* Compute source port for outgoing packet
|
|
|
- * first choice to use L4 flow hash since it will spread
|
|
|
- * better and maybe available from hardware
|
|
|
- * secondary choice is to use jhash on the Ethernet header
|
|
|
- */
|
|
|
-__be16 vxlan_src_port(__u16 port_min, __u16 port_max, struct sk_buff *skb)
|
|
|
-{
|
|
|
- unsigned int range = (port_max - port_min) + 1;
|
|
|
- u32 hash;
|
|
|
-
|
|
|
- hash = skb_get_hash(skb);
|
|
|
- if (!hash)
|
|
|
- hash = jhash(skb->data, 2 * ETH_ALEN,
|
|
|
- (__force u32) skb->protocol);
|
|
|
-
|
|
|
- return htons((((u64) hash * range) >> 32) + port_min);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(vxlan_src_port);
|
|
|
-
|
|
|
static inline struct sk_buff *vxlan_handle_offloads(struct sk_buff *skb,
|
|
|
bool udp_csum)
|
|
|
{
|
|
@@ -1807,7 +1788,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
|
|
if (tos == 1)
|
|
|
tos = ip_tunnel_get_dsfield(old_iph, skb);
|
|
|
|
|
|
- src_port = vxlan_src_port(vxlan->port_min, vxlan->port_max, skb);
|
|
|
+ src_port = udp_flow_src_port(dev_net(dev), skb, vxlan->port_min,
|
|
|
+ vxlan->port_max, true);
|
|
|
|
|
|
if (dst->sa.sa_family == AF_INET) {
|
|
|
memset(&fl4, 0, sizeof(fl4));
|
|
@@ -2235,7 +2217,6 @@ static void vxlan_setup(struct net_device *dev)
|
|
|
{
|
|
|
struct vxlan_dev *vxlan = netdev_priv(dev);
|
|
|
unsigned int h;
|
|
|
- int low, high;
|
|
|
|
|
|
eth_hw_addr_random(dev);
|
|
|
ether_setup(dev);
|
|
@@ -2272,9 +2253,6 @@ static void vxlan_setup(struct net_device *dev)
|
|
|
vxlan->age_timer.function = vxlan_cleanup;
|
|
|
vxlan->age_timer.data = (unsigned long) vxlan;
|
|
|
|
|
|
- inet_get_local_port_range(dev_net(dev), &low, &high);
|
|
|
- vxlan->port_min = low;
|
|
|
- vxlan->port_max = high;
|
|
|
vxlan->dst_port = htons(vxlan_port);
|
|
|
|
|
|
vxlan->dev = dev;
|