Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 323e126f authored by David S. Miller's avatar David S. Miller
Browse files

ipv4: Don't pre-seed hoplimit metric.



Always go through a new ip4_dst_hoplimit() helper, just like ipv6.

This allowed several simplifications:

1) The interim dst_metric_hoplimit() can go as it's no longer
   userd.

2) The sysctl_ip_default_ttl entry no longer needs to use
   ipv4_doint_and_flush, since the sysctl is not cached in
   routing cache metrics any longer.

3) ipv4_doint_and_flush no longer needs to be exported and
   therefore can be marked static.

When ipv4_doint_and_flush_strategy was removed some time ago,
the external declaration in ip.h was mistakenly left around
so kill that off too.

We have to move the sysctl_ip_default_ttl declaration into
ipv4's route cache definition header net/route.h, because
currently net/ip.h (where the declaration lives now) has
a back dependency on net/route.h

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a02e4b7d
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -277,7 +277,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
	iph->tos      = 0;
	iph->tos      = 0;
	iph->daddr    = rt->rt_dst;
	iph->daddr    = rt->rt_dst;
	iph->saddr    = rt->rt_src;
	iph->saddr    = rt->rt_src;
	iph->ttl      = dst_metric_hoplimit(&rt->dst);
	iph->ttl      = ip4_dst_hoplimit(&rt->dst);
	iph->tot_len  = htons(skb->len);
	iph->tot_len  = htons(skb->len);


	skb_dst_drop(skb);
	skb_dst_drop(skb);
+0 −6
Original line number Original line Diff line number Diff line
@@ -116,12 +116,6 @@ dst_metric(const struct dst_entry *dst, const int metric)
	return dst_metric_raw(dst, metric);
	return dst_metric_raw(dst, metric);
}
}


static inline u32
dst_metric_hoplimit(const struct dst_entry *dst)
{
	return dst_metric_raw(dst, RTAX_HOPLIMIT);
}

static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
{
{
	dst->_metrics[metric-1] = val;
	dst->_metrics[metric-1] = val;
+0 −10
Original line number Original line Diff line number Diff line
@@ -201,7 +201,6 @@ static inline int inet_is_reserved_local_port(int port)
	return test_bit(port, sysctl_local_reserved_ports);
	return test_bit(port, sysctl_local_reserved_ports);
}
}


extern int sysctl_ip_default_ttl;
extern int sysctl_ip_nonlocal_bind;
extern int sysctl_ip_nonlocal_bind;


extern struct ctl_path net_core_path[];
extern struct ctl_path net_core_path[];
@@ -428,15 +427,6 @@ extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
extern void	ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
extern void	ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
			       u32 info);
			       u32 info);


/* sysctl helpers - any sysctl which holds a value that ends up being
 * fed into the routing cache should use these handlers.
 */
int ipv4_doint_and_flush(ctl_table *ctl, int write,
			 void __user *buffer,
			 size_t *lenp, loff_t *ppos);
int ipv4_doint_and_flush_strategy(ctl_table *table,
				  void __user *oldval, size_t __user *oldlenp,
				  void __user *newval, size_t newlen);
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
extern int ip_misc_proc_init(void);
extern int ip_misc_proc_init(void);
#endif
#endif
+11 −0
Original line number Original line Diff line number Diff line
@@ -231,4 +231,15 @@ static inline int inet_iif(const struct sk_buff *skb)
	return skb_rtable(skb)->rt_iif;
	return skb_rtable(skb)->rt_iif;
}
}


extern int sysctl_ip_default_ttl;

static inline int ip4_dst_hoplimit(const struct dst_entry *dst)
{
	int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT);

	if (hoplimit == 0)
		hoplimit = sysctl_ip_default_ttl;
	return hoplimit;
}

#endif	/* _ROUTE_H */
#endif	/* _ROUTE_H */
+3 −3
Original line number Original line Diff line number Diff line
@@ -1430,7 +1430,7 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write,
	return ret;
	return ret;
}
}


int ipv4_doint_and_flush(ctl_table *ctl, int write,
static int ipv4_doint_and_flush(ctl_table *ctl, int write,
				void __user *buffer,
				void __user *buffer,
				size_t *lenp, loff_t *ppos)
				size_t *lenp, loff_t *ppos)
{
{
Loading