IPVS: Integrate ESP protocol into ip_vs_proto_ah.c

Rename all ah_* functions to ah_esp_* (and adjust comments). Move ESP
protocol definition into ip_vs_proto_ah.c and remove all usage of
ip_vs_proto_esp.c.

Make the compilation of ip_vs_proto_ah.c dependent on a new config
variable, IP_VS_PROTO_AH_ESP, which is selected either by
IP_VS_PROTO_ESP or IP_VS_PROTO_AH. Only compile the selected protocols'
structures within this file.

Signed-off-by: Julius Volz <juliusv@google.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
Julius Volz 2008-08-22 14:06:12 +02:00 committed by Simon Horman
parent f728bafb56
commit 409a19669e
3 changed files with 54 additions and 24 deletions

View file

@ -71,14 +71,20 @@ config IP_VS_PROTO_UDP
This option enables support for load balancing UDP transport This option enables support for load balancing UDP transport
protocol. Say Y if unsure. protocol. Say Y if unsure.
config IP_VS_PROTO_AH_ESP
bool
depends on UNDEFINED
config IP_VS_PROTO_ESP config IP_VS_PROTO_ESP
bool "ESP load balancing support" bool "ESP load balancing support"
select IP_VS_PROTO_AH_ESP
---help--- ---help---
This option enables support for load balancing ESP (Encapsulation This option enables support for load balancing ESP (Encapsulation
Security Payload) transport protocol. Say Y if unsure. Security Payload) transport protocol. Say Y if unsure.
config IP_VS_PROTO_AH config IP_VS_PROTO_AH
bool "AH load balancing support" bool "AH load balancing support"
select IP_VS_PROTO_AH_ESP
---help--- ---help---
This option enables support for load balancing AH (Authentication This option enables support for load balancing AH (Authentication
Header) transport protocol. Say Y if unsure. Header) transport protocol. Say Y if unsure.

View file

@ -6,8 +6,7 @@
ip_vs_proto-objs-y := ip_vs_proto-objs-y :=
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_TCP) += ip_vs_proto_tcp.o ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_TCP) += ip_vs_proto_tcp.o
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_UDP) += ip_vs_proto_udp.o ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_UDP) += ip_vs_proto_udp.o
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_ESP) += ip_vs_proto_esp.o ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_AH_ESP) += ip_vs_proto_ah.o
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_AH) += ip_vs_proto_ah.o
ip_vs-objs := ip_vs_conn.o ip_vs_core.o ip_vs_ctl.o ip_vs_sched.o \ ip_vs-objs := ip_vs_conn.o ip_vs_core.o ip_vs_ctl.o ip_vs_sched.o \
ip_vs_xmit.o ip_vs_app.o ip_vs_sync.o \ ip_vs_xmit.o ip_vs_app.o ip_vs_sync.o \

View file

@ -1,5 +1,5 @@
/* /*
* ip_vs_proto_ah.c: AH IPSec load balancing support for IPVS * ip_vs_proto_ah_esp.c: AH/ESP IPSec load balancing support for IPVS
* *
* Authors: Julian Anastasov <ja@ssi.bg>, February 2002 * Authors: Julian Anastasov <ja@ssi.bg>, February 2002
* Wensong Zhang <wensong@linuxvirtualserver.org> * Wensong Zhang <wensong@linuxvirtualserver.org>
@ -39,11 +39,11 @@ struct isakmp_hdr {
static struct ip_vs_conn * static struct ip_vs_conn *
ah_conn_in_get(const struct sk_buff *skb, ah_esp_conn_in_get(const struct sk_buff *skb,
struct ip_vs_protocol *pp, struct ip_vs_protocol *pp,
const struct iphdr *iph, const struct iphdr *iph,
unsigned int proto_off, unsigned int proto_off,
int inverse) int inverse)
{ {
struct ip_vs_conn *cp; struct ip_vs_conn *cp;
@ -79,8 +79,8 @@ ah_conn_in_get(const struct sk_buff *skb,
static struct ip_vs_conn * static struct ip_vs_conn *
ah_conn_out_get(const struct sk_buff *skb, struct ip_vs_protocol *pp, ah_esp_conn_out_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
const struct iphdr *iph, unsigned int proto_off, int inverse) const struct iphdr *iph, unsigned int proto_off, int inverse)
{ {
struct ip_vs_conn *cp; struct ip_vs_conn *cp;
@ -112,12 +112,12 @@ ah_conn_out_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
static int static int
ah_conn_schedule(struct sk_buff *skb, ah_esp_conn_schedule(struct sk_buff *skb,
struct ip_vs_protocol *pp, struct ip_vs_protocol *pp,
int *verdict, struct ip_vs_conn **cpp) int *verdict, struct ip_vs_conn **cpp)
{ {
/* /*
* AH is only related traffic. Pass the packet to IP stack. * AH/ESP is only related traffic. Pass the packet to IP stack.
*/ */
*verdict = NF_ACCEPT; *verdict = NF_ACCEPT;
return 0; return 0;
@ -125,8 +125,8 @@ ah_conn_schedule(struct sk_buff *skb,
static void static void
ah_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb, ah_esp_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb,
int offset, const char *msg) int offset, const char *msg)
{ {
char buf[256]; char buf[256];
struct iphdr _iph, *ih; struct iphdr _iph, *ih;
@ -143,28 +143,29 @@ ah_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb,
} }
static void ah_init(struct ip_vs_protocol *pp) static void ah_esp_init(struct ip_vs_protocol *pp)
{ {
/* nothing to do now */ /* nothing to do now */
} }
static void ah_exit(struct ip_vs_protocol *pp) static void ah_esp_exit(struct ip_vs_protocol *pp)
{ {
/* nothing to do now */ /* nothing to do now */
} }
#ifdef CONFIG_IP_VS_PROTO_AH
struct ip_vs_protocol ip_vs_protocol_ah = { struct ip_vs_protocol ip_vs_protocol_ah = {
.name = "AH", .name = "AH",
.protocol = IPPROTO_AH, .protocol = IPPROTO_AH,
.num_states = 1, .num_states = 1,
.dont_defrag = 1, .dont_defrag = 1,
.init = ah_init, .init = ah_esp_init,
.exit = ah_exit, .exit = ah_esp_exit,
.conn_schedule = ah_conn_schedule, .conn_schedule = ah_esp_conn_schedule,
.conn_in_get = ah_conn_in_get, .conn_in_get = ah_esp_conn_in_get,
.conn_out_get = ah_conn_out_get, .conn_out_get = ah_esp_conn_out_get,
.snat_handler = NULL, .snat_handler = NULL,
.dnat_handler = NULL, .dnat_handler = NULL,
.csum_check = NULL, .csum_check = NULL,
@ -172,7 +173,31 @@ struct ip_vs_protocol ip_vs_protocol_ah = {
.register_app = NULL, .register_app = NULL,
.unregister_app = NULL, .unregister_app = NULL,
.app_conn_bind = NULL, .app_conn_bind = NULL,
.debug_packet = ah_debug_packet, .debug_packet = ah_esp_debug_packet,
.timeout_change = NULL, /* ISAKMP */ .timeout_change = NULL, /* ISAKMP */
.set_state_timeout = NULL, .set_state_timeout = NULL,
}; };
#endif
#ifdef CONFIG_IP_VS_PROTO_ESP
struct ip_vs_protocol ip_vs_protocol_esp = {
.name = "ESP",
.protocol = IPPROTO_ESP,
.num_states = 1,
.dont_defrag = 1,
.init = ah_esp_init,
.exit = ah_esp_exit,
.conn_schedule = ah_esp_conn_schedule,
.conn_in_get = ah_esp_conn_in_get,
.conn_out_get = ah_esp_conn_out_get,
.snat_handler = NULL,
.dnat_handler = NULL,
.csum_check = NULL,
.state_transition = NULL,
.register_app = NULL,
.unregister_app = NULL,
.app_conn_bind = NULL,
.debug_packet = ah_esp_debug_packet,
.timeout_change = NULL, /* ISAKMP */
};
#endif