From bb398c49f05e58f88531dec9869d6996468b9ec4 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Wed, 9 Dec 2009 18:37:11 +0000
Subject: [PATCH] bumps strongswan 2.8 for 2.4 kernels to latest version 2.8.11
 (patch by edgar soldin) fixes a compile error because of the missing circleq
 implementation in uclibc.

git-svn-id: svn://svn.openwrt.org/openwrt/packages@18724 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 net/strongswan/Makefile                       |   6 +-
 .../patches/400-pluto-fix_CIRCLEQ.patch       | 149 ++++++++++++++++++
 2 files changed, 152 insertions(+), 3 deletions(-)
 create mode 100644 net/strongswan/patches/400-pluto-fix_CIRCLEQ.patch

diff --git a/net/strongswan/Makefile b/net/strongswan/Makefile
index b86afff8b..9508e67d1 100644
--- a/net/strongswan/Makefile
+++ b/net/strongswan/Makefile
@@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=strongswan
-PKG_VERSION:=2.8.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.8.11
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://download.strongswan.org/
-PKG_MD5SUM:=57427f5b48123851a73b10d78dd4f8d6
+PKG_MD5SUM:=067189ae1586f0fdc5527c3c90448771
 
 include $(INCLUDE_DIR)/package.mk
 
diff --git a/net/strongswan/patches/400-pluto-fix_CIRCLEQ.patch b/net/strongswan/patches/400-pluto-fix_CIRCLEQ.patch
new file mode 100644
index 000000000..17c926e05
--- /dev/null
+++ b/net/strongswan/patches/400-pluto-fix_CIRCLEQ.patch
@@ -0,0 +1,149 @@
+diff -Nurp strongswan-2.8.11.orig/linux/include/circ-queue.h strongswan-2.8.11.queue/linux/include/circ-queue.h
+--- strongswan-2.8.11.orig/linux/include/circ-queue.h	1970-01-01 01:00:00.000000000 +0100
++++ strongswan-2.8.11.queue/linux/include/circ-queue.h	2009-12-02 19:11:31.414549616 +0100
+@@ -0,0 +1,131 @@
++/*
++ * Copyright (c) 1991, 1993
++ *	The Regents of the University of California.  All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ *    notice, this list of conditions and the following disclaimer in the
++ *    documentation and/or other materials provided with the distribution.
++ * 3. All advertising materials mentioning features or use of this software
++ *    must display the following acknowledgement:
++ *	This product includes software developed by the University of
++ *	California, Berkeley and its contributors.
++ * 4. Neither the name of the University nor the names of its contributors
++ *    may be used to endorse or promote products derived from this software
++ *    without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ *
++ *	@(#)queue.h	8.5 (Berkeley) 8/20/94
++ * $FreeBSD: ports/misc/44bsd-more/files/queue.h,v 1.1 2001/01/06 03:41:36 hoek Exp $
++ */
++
++/*
++ * Circular queue definitions.
++ */
++#define CIRCLEQ_HEAD(name, type)					\
++struct name {								\
++	struct type *cqh_first;		/* first element */		\
++	struct type *cqh_last;		/* last element */		\
++}
++
++#define CIRCLEQ_ENTRY(type)						\
++struct {								\
++	struct type *cqe_next;		/* next element */		\
++	struct type *cqe_prev;		/* previous element */		\
++}
++
++/*
++ * Circular queue functions.
++ */
++#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head))
++
++#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
++
++#define CIRCLEQ_FOREACH(var, head, field)				\
++	for((var) = (head)->cqh_first;					\
++	    (var) != (void *)(head);					\
++	    (var) = (var)->field.cqe_next)
++
++#define CIRCLEQ_FOREACH_REVERSE(var, head, field)			\
++	for((var) = (head)->cqh_last;					\
++	    (var) != (void *)(head);					\
++	    (var) = (var)->field.cqe_prev)
++
++#define	CIRCLEQ_INIT(head) do {						\
++	(head)->cqh_first = (void *)(head);				\
++	(head)->cqh_last = (void *)(head);				\
++} while (0)
++
++#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {		\
++	(elm)->field.cqe_next = (listelm)->field.cqe_next;		\
++	(elm)->field.cqe_prev = (listelm);				\
++	if ((listelm)->field.cqe_next == (void *)(head))		\
++		(head)->cqh_last = (elm);				\
++	else								\
++		(listelm)->field.cqe_next->field.cqe_prev = (elm);	\
++	(listelm)->field.cqe_next = (elm);				\
++} while (0)
++
++#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {		\
++	(elm)->field.cqe_next = (listelm);				\
++	(elm)->field.cqe_prev = (listelm)->field.cqe_prev;		\
++	if ((listelm)->field.cqe_prev == (void *)(head))		\
++		(head)->cqh_first = (elm);				\
++	else								\
++		(listelm)->field.cqe_prev->field.cqe_next = (elm);	\
++	(listelm)->field.cqe_prev = (elm);				\
++} while (0)
++
++#define CIRCLEQ_INSERT_HEAD(head, elm, field) do {			\
++	(elm)->field.cqe_next = (head)->cqh_first;			\
++	(elm)->field.cqe_prev = (void *)(head);				\
++	if ((head)->cqh_last == (void *)(head))				\
++		(head)->cqh_last = (elm);				\
++	else								\
++		(head)->cqh_first->field.cqe_prev = (elm);		\
++	(head)->cqh_first = (elm);					\
++} while (0)
++
++#define CIRCLEQ_INSERT_TAIL(head, elm, field) do {			\
++	(elm)->field.cqe_next = (void *)(head);				\
++	(elm)->field.cqe_prev = (head)->cqh_last;			\
++	if ((head)->cqh_first == (void *)(head))			\
++		(head)->cqh_first = (elm);				\
++	else								\
++		(head)->cqh_last->field.cqe_next = (elm);		\
++	(head)->cqh_last = (elm);					\
++} while (0)
++
++#define CIRCLEQ_LAST(head) ((head)->cqh_last)
++
++#define CIRCLEQ_NEXT(elm,field) ((elm)->field.cqe_next)
++
++#define CIRCLEQ_PREV(elm,field) ((elm)->field.cqe_prev)
++
++#define	CIRCLEQ_REMOVE(head, elm, field) do {				\
++	if ((elm)->field.cqe_next == (void *)(head))			\
++		(head)->cqh_last = (elm)->field.cqe_prev;		\
++	else								\
++		(elm)->field.cqe_next->field.cqe_prev =			\
++		    (elm)->field.cqe_prev;				\
++	if ((elm)->field.cqe_prev == (void *)(head))			\
++		(head)->cqh_first = (elm)->field.cqe_next;		\
++	else								\
++		(elm)->field.cqe_prev->field.cqe_next =			\
++		    (elm)->field.cqe_next;				\
++} while (0)
+diff -Nurp strongswan-2.8.11.orig/programs/pluto/connections.h strongswan-2.8.11.queue/programs/pluto/connections.h
+--- strongswan-2.8.11.orig/programs/pluto/connections.h	2007-06-18 20:24:51.000000000 +0200
++++ strongswan-2.8.11.queue/programs/pluto/connections.h	2009-12-02 19:11:02.127064115 +0100
+@@ -18,6 +18,10 @@
+ #define _CONNECTIONS_H
+ 
+ #include <sys/queue.h>
++/* This handles the 'syntax error before "CIRCLEQ_ENTRY"' */
++#ifndef CIRCLEQ_HEAD
++#include <circ-queue.h>
++#endif
+ 
+ #include "id.h"
+ #include "certs.h"