On Fri, Oct 29, 2010 at 02:16:37PM +0200, Hans Schillstrom wrote: > New structs defined for version 1 of sync. > > * ip_vs_sync_v4 Ipv4 base format struct > * ip_vs_sync_v6 Ipv6 base format struct > > *v2 > ip_vs_sync_pe_opt removed due to new option/param handling. > Julians comments with options casus this change > > Signed-off-by: Hans Schillstrom <hans.schillstrom@xxxxxxxxxxxx> > --- > net/netfilter/ipvs/ip_vs_sync.c | 144 ++++++++++++++++++++++++++++++++++++--- > 1 files changed, 134 insertions(+), 10 deletions(-) > > diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c > index 90ed9b3..f7f115d 100644 > --- a/net/netfilter/ipvs/ip_vs_sync.c > +++ b/net/netfilter/ipvs/ip_vs_sync.c [ snip ] > @@ -71,40 +73,151 @@ struct ip_vs_sync_conn_options { > struct ip_vs_seq out_seq; /* outgoing seq. struct */ > }; > > +/* > + Connection Message format > + > + 0 1 2 3 > + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Type | Protocol | Ver. | Size | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Flags | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | State | cport | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | vport | dport | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | fwmark | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | timeout (in sec.) | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | ... | > + | IP-Addresses (v4 or v6) | > + | ... | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Option Type | Option Length | Option data 16 bit aligned | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | > + | ... | > + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | | Option Type | Option Length | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Option data | > + | Last Option data should be 32 bit aligned | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + > + * Type 1 messages IPv4 > + * > + */ > +struct ip_vs_sync_v4 { > + __u8 type; > + __u8 protocol; /* Which protocol (TCP/UDP) */ > + __be16 ver_size; /* Version msb 4 bits */ > + /* Flags and state transition */ > + __be32 flags; /* status flags */ > + __be16 state; /* state info */ > + /* Protocol, addresses and port numbers */ > + __be16 cport; > + __be16 vport; > + __be16 dport; > + __be32 fwmark; /* Firewall mark from skb */ > + __be32 timeout; /* cp timeout */ > + __be32 caddr; /* client address */ > + __be32 vaddr; /* virtual address */ > + __be32 daddr; /* destination address */ > + /* The sequence options start here */ > + /* PE data padded to 32bit alignment after seq. options */ > +}; > +/* > + * Type 2 messages IPv6 > + */ > +struct ip_vs_sync_v6 { > + __u8 type; > + __u8 protocol; /* Which protocol (TCP/UDP) */ > + __be16 ver_size; /* Version msb 4 bits */ > + /* Flags and state transition */ > + __be32 flags; /* status flags */ > + __be16 state; /* state info */ > + /* Protocol, addresses and port numbers */ > + __be16 cport; > + __be16 vport; > + __be16 dport; > + __be32 fwmark; /* Firewall mark from skb */ > + __be32 timeout; /* cp timeout */ > + struct in6_addr caddr; /* client address */ > + struct in6_addr vaddr; /* virtual address */ > + struct in6_addr daddr; /* destination address */ > + /* The sequence options start here */ > + /* PE data padded to 32bit alignment after seq. options */ There are mixed spaces and tabs in between the types and the member names in struct ip_vs_sync_v4 and ip_vs_sync_v6. And after info in the comment after the state member in each structure. > +}; > + > +union ip_vs_sync_conn { > + struct ip_vs_sync_v4 v4; > + struct ip_vs_sync_v6 v6; > +}; > + > +/* Bits in Type field in above */ > +#define STYPE_INET6 1 > +#define STYPE_INET6_PACK 2 > +#define STYPE_OPT_DATA 7 There is mixed tabs and spaces after DATA. > + > +#define SVER_SHIFT 12 /* Shift to get version */ > +#define SVER_MASK 0x0fff /* Mask to strip version */ > + > +#define IPVS_OPT_SEQ_DATA 1 There is mixed tabs and spaces after DATA. > +#define IPVS_OPT_PE_DATA 2 > +#define IPVS_OPT_PE_NAME 3 > + > +#define IPVS_OPT_F_SEQ_DATA (1 << (IPVS_OPT_SEQ_DATA-1)) > +#define IPVS_OPT_F_PE_DATA (1 << (IPVS_OPT_PE_DATA)) > +#define IPVS_OPT_F_PE_NAME (1 << (IPVS_OPT_PE_NAME)) > + > struct ip_vs_sync_thread_data { > struct socket *sock; > char *buf; > }; > > -#define SIMPLE_CONN_SIZE (sizeof(struct ip_vs_sync_conn)) > +#define SIMPLE_CONN_SIZE (sizeof(struct ip_vs_sync_conn_v0)) > #define FULL_CONN_SIZE \ > -(sizeof(struct ip_vs_sync_conn) + sizeof(struct ip_vs_sync_conn_options)) > +(sizeof(struct ip_vs_sync_conn_v0) + sizeof(struct ip_vs_sync_conn_options)) > > > /* > The master mulitcasts messages to the backup load balancers in the > following format. > > + Versrion 1: > 0 1 2 3 > 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > - | Count Conns | SyncID | Size | > + | 0 | Syncid | Size | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Count Conns | Version | Spare set to Zero | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > | | > | IPVS Sync Connection (1) | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > | . | > - | . | > + ~ . ~ > | . | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > | | > | IPVS Sync Connection (n) | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + > + Version 0 Header > + 0 1 2 3 > + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | Count Conns | SyncID | Size | > + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > + | IPVS Sync Connection (1) | > */ > > #define SYNC_MESG_HEADER_LEN 4 > #define MAX_CONNS_PER_SYNCBUFF 255 /* nr_conns in ip_vs_sync_mesg is 8 bit */ > > +/* Version 0 header */ > struct ip_vs_sync_mesg { > __u8 nr_conns; > __u8 syncid; [ snip ] -- 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