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

Commit ab161976 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Simon Horman
Browse files

ipvs: Pass ipvs into .conn_in_get and ip_vs_conn_in_get_proto



Stop relying on "net_ipvs(skb_net(skb))" to derive the ipvs as
skb_net is a hack.

Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent f5099dd4
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -493,7 +493,8 @@ struct ip_vs_protocol {
			     struct ip_vs_iphdr *iph);
			     struct ip_vs_iphdr *iph);


	struct ip_vs_conn *
	struct ip_vs_conn *
	(*conn_in_get)(int af,
	(*conn_in_get)(struct netns_ipvs *ipvs,
		       int af,
		       const struct sk_buff *skb,
		       const struct sk_buff *skb,
		       const struct ip_vs_iphdr *iph);
		       const struct ip_vs_iphdr *iph);


@@ -1222,7 +1223,8 @@ static inline void ip_vs_conn_fill_param(struct netns_ipvs *ipvs, int af, int pr
struct ip_vs_conn *ip_vs_conn_in_get(const struct ip_vs_conn_param *p);
struct ip_vs_conn *ip_vs_conn_in_get(const struct ip_vs_conn_param *p);
struct ip_vs_conn *ip_vs_ct_in_get(const struct ip_vs_conn_param *p);
struct ip_vs_conn *ip_vs_ct_in_get(const struct ip_vs_conn_param *p);


struct ip_vs_conn * ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
struct ip_vs_conn * ip_vs_conn_in_get_proto(struct netns_ipvs *ipvs, int af,
					    const struct sk_buff *skb,
					    const struct ip_vs_iphdr *iph);
					    const struct ip_vs_iphdr *iph);


struct ip_vs_conn *ip_vs_conn_out_get(const struct ip_vs_conn_param *p);
struct ip_vs_conn *ip_vs_conn_out_get(const struct ip_vs_conn_param *p);
+2 −2
Original line number Original line Diff line number Diff line
@@ -335,10 +335,10 @@ ip_vs_conn_fill_param_proto(struct netns_ipvs *ipvs,
}
}


struct ip_vs_conn *
struct ip_vs_conn *
ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
ip_vs_conn_in_get_proto(struct netns_ipvs *ipvs, int af,
			const struct sk_buff *skb,
			const struct ip_vs_iphdr *iph)
			const struct ip_vs_iphdr *iph)
{
{
	struct netns_ipvs *ipvs = net_ipvs(skb_net(skb));
	struct ip_vs_conn_param p;
	struct ip_vs_conn_param p;


	if (ip_vs_conn_fill_param_proto(ipvs, af, skb, iph, &p))
	if (ip_vs_conn_fill_param_proto(ipvs, af, skb, iph, &p))
+4 −4
Original line number Original line Diff line number Diff line
@@ -469,7 +469,7 @@ ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb,
	 */
	 */
	if ((!skb->dev || skb->dev->flags & IFF_LOOPBACK)) {
	if ((!skb->dev || skb->dev->flags & IFF_LOOPBACK)) {
		iph->hdr_flags ^= IP_VS_HDR_INVERSE;
		iph->hdr_flags ^= IP_VS_HDR_INVERSE;
		cp = pp->conn_in_get(svc->af, skb, iph);
		cp = pp->conn_in_get(svc->ipvs, svc->af, skb, iph);
		iph->hdr_flags ^= IP_VS_HDR_INVERSE;
		iph->hdr_flags ^= IP_VS_HDR_INVERSE;


		if (cp) {
		if (cp) {
@@ -1490,7 +1490,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
	/* The embedded headers contain source and dest in reverse order.
	/* The embedded headers contain source and dest in reverse order.
	 * For IPIP this is error for request, not for reply.
	 * For IPIP this is error for request, not for reply.
	 */
	 */
	cp = pp->conn_in_get(AF_INET, skb, &ciph);
	cp = pp->conn_in_get(ipvs, AF_INET, skb, &ciph);


	if (!cp) {
	if (!cp) {
		int v;
		int v;
@@ -1648,7 +1648,7 @@ static int ip_vs_in_icmp_v6(struct sk_buff *skb, int *related,
	/* The embedded headers contain source and dest in reverse order
	/* The embedded headers contain source and dest in reverse order
	 * if not from localhost
	 * if not from localhost
	 */
	 */
	cp = pp->conn_in_get(AF_INET6, skb, &ciph);
	cp = pp->conn_in_get(ipvs, AF_INET6, skb, &ciph);


	if (!cp) {
	if (!cp) {
		int v;
		int v;
@@ -1780,7 +1780,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
	/*
	/*
	 * Check if the packet belongs to an existing connection entry
	 * Check if the packet belongs to an existing connection entry
	 */
	 */
	cp = pp->conn_in_get(af, skb, &iph);
	cp = pp->conn_in_get(ipvs, af, skb, &iph);


	conn_reuse_mode = sysctl_conn_reuse_mode(ipvs);
	conn_reuse_mode = sysctl_conn_reuse_mode(ipvs);
	if (conn_reuse_mode && !iph.fragoffs &&
	if (conn_reuse_mode && !iph.fragoffs &&
+1 −2
Original line number Original line Diff line number Diff line
@@ -56,12 +56,11 @@ ah_esp_conn_fill_param_proto(struct netns_ipvs *ipvs, int af,
}
}


static struct ip_vs_conn *
static struct ip_vs_conn *
ah_esp_conn_in_get(int af, const struct sk_buff *skb,
ah_esp_conn_in_get(struct netns_ipvs *ipvs, int af, const struct sk_buff *skb,
		   const struct ip_vs_iphdr *iph)
		   const struct ip_vs_iphdr *iph)
{
{
	struct ip_vs_conn *cp;
	struct ip_vs_conn *cp;
	struct ip_vs_conn_param p;
	struct ip_vs_conn_param p;
	struct netns_ipvs *ipvs = net_ipvs(skb_net(skb));


	ah_esp_conn_fill_param_proto(ipvs, af, iph, &p);
	ah_esp_conn_fill_param_proto(ipvs, af, iph, &p);
	cp = ip_vs_conn_in_get(&p);
	cp = ip_vs_conn_in_get(&p);