LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

Re: [patch v2 08/12] [PATCH 08/12] IPVS: Add persistence engine data to

To: Julian Anastasov <ja@xxxxxx>
Subject: Re: [patch v2 08/12] [PATCH 08/12] IPVS: Add persistence engine data to /proc/net/ip_vs_conn
Cc: lvs-devel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx, netfilter@xxxxxxxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx, Jan Engelhardt <jengelh@xxxxxxxxxx>, Stephen Hemminger <shemminger@xxxxxxxxxx>, Wensong Zhang <wensong@xxxxxxxxxxxx>, Patrick McHardy <kaber@xxxxxxxxx>
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Sat, 2 Oct 2010 10:58:57 +0900
On Sat, Oct 02, 2010 at 12:50:09AM +0300, Julian Anastasov wrote:
> 
>       Hello,
> 
> On Fri, 1 Oct 2010, Simon Horman wrote:
> 
> >Index: lvs-test-2.6/net/netfilter/ipvs/ip_vs_conn.c
> >===================================================================
> >--- lvs-test-2.6.orig/net/netfilter/ipvs/ip_vs_conn.c        2010-10-01 
> >22:27:17.000000000 +0900
> >+++ lvs-test-2.6/net/netfilter/ipvs/ip_vs_conn.c     2010-10-01 
> >22:27:32.000000000 +0900
> >@@ -938,30 +938,44 @@ static int ip_vs_conn_seq_show(struct se
> >
> >     if (v == SEQ_START_TOKEN)
> >             seq_puts(seq,
> >-   "Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires\n");
> >+   "Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires 
> >PEName PEData\n");
> >     else {
> >             const struct ip_vs_conn *cp = v;
> >+            char pe_data[IP_VS_PENAME_MAXLEN + IP_VS_PEDATA_MAXLEN + 3];
> >+            size_t len = 0;
> >+
> 
>       Add check for cp->dest, it is optional:

Done.

> >+            if (cp->dest->svc->pe && cp->dest->svc->pe->show_pe_data) {
> >+                    pe_data[0] = ' ';
> >+                    len = strlen(cp->dest->svc->pe->name);
> >+                    memcpy(pe_data + 1, cp->dest->svc->pe->name, len);
> >+                    pe_data[len + 1] = ' ';
> >+                    len += 2;
> >+                    len += cp->dest->svc->pe->show_pe_data(cp,
> >+                                                           pe_data + len);
> >+            }
> >+            pe_data[len] = '\0';
> 

I will repost the entire series a little later.
For reference here is the updated patch.

>From bee0c73040b632723ff7a058f61a79063b18e882 Mon Sep 17 00:00:00 2001
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Sun, 22 Aug 2010 21:37:53 +0900
Subject: [patch v2.1 08/12] IPVS: Add persistence engine data to 
/proc/net/ip_vs_conn

This shouldn't break compatibility with userspace as the new data
is at the end of the line.

I have confirmed that this doesn't break ipvsadm, the main (only?)
user-space user of this data.

Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>

---

* Jan Engelhardt suggested using netlink to do this, but it seems like
  overkill to me. I'm willing to be convinced otherwise.

v2
* Trivial rediff

v2.1
* As suggested by Julian Anastasov
  - ip_vs_conn_seq_show(): cp->dest is optional
    so test for its presence accordingly
  - Re-diff for addition of inverse parameter to ip_vs_conn_hashkey_param()

Index: lvs-test-2.6/include/net/ip_vs.h
===================================================================
--- lvs-test-2.6.orig/include/net/ip_vs.h       2010-10-02 10:55:43.000000000 
+0900
+++ lvs-test-2.6/include/net/ip_vs.h    2010-10-02 10:55:49.000000000 +0900
@@ -572,6 +572,7 @@ struct ip_vs_pe {
                         struct ip_vs_conn *ct);
        u32 (*hashkey_raw)(const struct ip_vs_conn_param *p, u32 initval,
                           bool inverse);
+       int (*show_pe_data)(const struct ip_vs_conn *cp, char *buf);
 };
 
 /*
Index: lvs-test-2.6/net/netfilter/ipvs/ip_vs_conn.c
===================================================================
--- lvs-test-2.6.orig/net/netfilter/ipvs/ip_vs_conn.c   2010-10-02 
10:55:43.000000000 +0900
+++ lvs-test-2.6/net/netfilter/ipvs/ip_vs_conn.c        2010-10-02 
10:57:00.000000000 +0900
@@ -950,30 +950,45 @@ static int ip_vs_conn_seq_show(struct se
 
        if (v == SEQ_START_TOKEN)
                seq_puts(seq,
-   "Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires\n");
+   "Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires PEName 
PEData\n");
        else {
                const struct ip_vs_conn *cp = v;
+               char pe_data[IP_VS_PENAME_MAXLEN + IP_VS_PEDATA_MAXLEN + 3];
+               size_t len = 0;
+
+               if (cp->dest && cp->dest->svc->pe &&
+                   cp->dest->svc->pe->show_pe_data) {
+                       pe_data[0] = ' ';
+                       len = strlen(cp->dest->svc->pe->name);
+                       memcpy(pe_data + 1, cp->dest->svc->pe->name, len);
+                       pe_data[len + 1] = ' ';
+                       len += 2;
+                       len += cp->dest->svc->pe->show_pe_data(cp,
+                                                              pe_data + len);
+               }
+               pe_data[len] = '\0';
 
 #ifdef CONFIG_IP_VS_IPV6
                if (cp->af == AF_INET6)
-                       seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X %pI6 %04X 
%-11s %7lu\n",
+                       seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X "
+                               "%pI6 %04X %-11s %7lu%s\n",
                                ip_vs_proto_name(cp->protocol),
                                &cp->caddr.in6, ntohs(cp->cport),
                                &cp->vaddr.in6, ntohs(cp->vport),
                                &cp->daddr.in6, ntohs(cp->dport),
                                ip_vs_state_name(cp->protocol, cp->state),
-                               (cp->timer.expires-jiffies)/HZ);
+                               (cp->timer.expires-jiffies)/HZ, pe_data);
                else
 #endif
                        seq_printf(seq,
                                "%-3s %08X %04X %08X %04X"
-                               " %08X %04X %-11s %7lu\n",
+                               " %08X %04X %-11s %7lu%s\n",
                                ip_vs_proto_name(cp->protocol),
                                ntohl(cp->caddr.ip), ntohs(cp->cport),
                                ntohl(cp->vaddr.ip), ntohs(cp->vport),
                                ntohl(cp->daddr.ip), ntohs(cp->dport),
                                ip_vs_state_name(cp->protocol, cp->state),
-                               (cp->timer.expires-jiffies)/HZ);
+                               (cp->timer.expires-jiffies)/HZ, pe_data);
        }
        return 0;
 }
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

<Prev in Thread] Current Thread [Next in Thread>