summaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-protocols/freediameter
diff options
context:
space:
mode:
authorJackie Huang <jackie.huang@windriver.com>2017-11-01 09:23:39 -0400
committerJoe MacDonald <joe_macdonald@mentor.com>2018-01-08 11:54:16 -0500
commitba8543aeee6b97b31e66c261563a197cd0be87e3 (patch)
treea87ef0ec6ebfe242322ffc1f91527a4f95c84641 /meta-networking/recipes-protocols/freediameter
parent72657d7a16f713711a7305d906d9704100a6c629 (diff)
downloadmeta-openembedded-ba8543aeee6b97b31e66c261563a197cd0be87e3.tar.gz
freediameter: add new recipe
freeDiameter is an open source Diameter protocol implementation. It provides an extensible platform for deploying a Diameter network for your Authentication, Authorization and Accounting needs. Signed-off-by: Jackie Huang <jackie.huang@windriver.com> Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com> Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
Diffstat (limited to 'meta-networking/recipes-protocols/freediameter')
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch223
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf250
-rwxr-xr-xmeta-networking/recipes-protocols/freediameter/files/freediameter.init72
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/freediameter.service11
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/install_test.patch22
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch72
-rw-r--r--meta-networking/recipes-protocols/freediameter/files/run-ptest11
-rw-r--r--meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb136
8 files changed, 797 insertions, 0 deletions
diff --git a/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch b/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
new file mode 100644
index 000000000..71a5a1ae4
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
@@ -0,0 +1,223 @@
1Replace murmurhash algorithm with Robert Jenkin's hash algorithm
2
3Upstream-Status: Pending
4
5From test result, murmurhash algorithm does not work in big endian
6processor, so replace it with Robert Jenkin's hash which has worked
7in linux kernel for many years and has more adaptability.
8
9Signed-off-by: Roy.Li <rongqing.li@windriver.com>
10---
11 libfdproto/ostr.c | 192 +++++++++++++++++++++--------------------------------
12 1 file changed, 74 insertions(+), 118 deletions(-)
13
14diff --git a/libfdproto/ostr.c b/libfdproto/ostr.c
15index 8f29b48..ce1f4dd 100644
16--- a/libfdproto/ostr.c
17+++ b/libfdproto/ostr.c
18@@ -430,128 +430,84 @@ after_proto:
19
20
21 /********************************************************************************************************/
22-/* Hash function -- credits to Austin Appleby, thank you ^^ */
23-/* See http://murmurhash.googlepages.com for more information on this function */
24-
25-/* the strings are NOT always aligned properly (ex: received in RADIUS message), so we use the aligned MurmurHash2 function as needed */
26-#define _HASH_MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
27-uint32_t fd_os_hash ( uint8_t * string, size_t len )
28+/*
29+ * Robert Jenkin's hash function.
30+ * http://burtleburtle.net/bob/hash/evahash.html
31+ * This is in the public domain.
32+ */
33+#define mix(a, b, c) \
34+ do { \
35+ a = a - b; a = a - c; a = a ^ (c >> 13); \
36+ b = b - c; b = b - a; b = b ^ (a << 8); \
37+ c = c - a; c = c - b; c = c ^ (b >> 13); \
38+ a = a - b; a = a - c; a = a ^ (c >> 12); \
39+ b = b - c; b = b - a; b = b ^ (a << 16); \
40+ c = c - a; c = c - b; c = c ^ (b >> 5); \
41+ a = a - b; a = a - c; a = a ^ (c >> 3); \
42+ b = b - c; b = b - a; b = b ^ (a << 10); \
43+ c = c - a; c = c - b; c = c ^ (b >> 15); \
44+ } while (0)
45+
46+unsigned hash_rjenkins(const char *str, unsigned length)
47 {
48- uint32_t hash = len;
49- uint8_t * data = string;
50-
51- const unsigned int m = 0x5bd1e995;
52- const int r = 24;
53- int align = (long)string & 3;
54-
55- if (!align || (len < 4)) {
56- /* In case data is aligned, MurmurHash2 function */
57- while(len >= 4)
58- {
59- /* Mix 4 bytes at a time into the hash */
60- uint32_t k = *(uint32_t *)data; /* We don't care about the byte order */
61-
62- _HASH_MIX(hash, k, m);
63-
64- data += 4;
65- len -= 4;
66- }
67-
68- /* Handle the last few bytes of the input */
69- switch(len) {
70- case 3: hash ^= data[2] << 16;
71- case 2: hash ^= data[1] << 8;
72- case 1: hash ^= data[0];
73- hash *= m;
74- }
75-
76- } else {
77- /* Unaligned data, use alignment-safe slower version */
78-
79- /* Pre-load the temp registers */
80- uint32_t t = 0, d = 0;
81- switch(align)
82- {
83- case 1: t |= data[2] << 16;
84- case 2: t |= data[1] << 8;
85- case 3: t |= data[0];
86- }
87- t <<= (8 * align);
88-
89- data += 4-align;
90- len -= 4-align;
91-
92- /* From this point, "data" can be read by chunks of 4 bytes */
93-
94- int sl = 8 * (4-align);
95- int sr = 8 * align;
96-
97- /* Mix */
98- while(len >= 4)
99- {
100- uint32_t k;
101-
102- d = *(unsigned int *)data;
103- k = (t >> sr) | (d << sl);
104-
105- _HASH_MIX(hash, k, m);
106-
107- t = d;
108-
109- data += 4;
110- len -= 4;
111- }
112-
113- /* Handle leftover data in temp registers */
114- d = 0;
115- if(len >= align)
116- {
117- uint32_t k;
118-
119- switch(align)
120- {
121- case 3: d |= data[2] << 16;
122- case 2: d |= data[1] << 8;
123- case 1: d |= data[0];
124- }
125-
126- k = (t >> sr) | (d << sl);
127- _HASH_MIX(hash, k, m);
128-
129- data += align;
130- len -= align;
131-
132- /* Handle tail bytes */
133-
134- switch(len)
135- {
136- case 3: hash ^= data[2] << 16;
137- case 2: hash ^= data[1] << 8;
138- case 1: hash ^= data[0];
139- hash *= m;
140- };
141- }
142- else
143- {
144- switch(len)
145- {
146- case 3: d |= data[2] << 16;
147- case 2: d |= data[1] << 8;
148- case 1: d |= data[0];
149- case 0: hash ^= (t >> sr) | (d << sl);
150- hash *= m;
151- }
152- }
153-
154+ const unsigned char *k = (const unsigned char *)str;
155+ uint32_t a, b, c; /* the internal state */
156+ uint32_t len; /* how many key bytes still need mixing */
157+
158+ /* Set up the internal state */
159+ len = length;
160+ a = 0x9e3779b9; /* the golden ratio; an arbitrary value */
161+ b = a;
162+ c = 0; /* variable initialization of internal state */
163+
164+ /* handle most of the key */
165+ while (len >= 12) {
166+ a = a + (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16) +
167+ ((uint32_t)k[3] << 24));
168+ b = b + (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16) +
169+ ((uint32_t)k[7] << 24));
170+ c = c + (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16) +
171+ ((uint32_t)k[11] << 24));
172+ mix(a, b, c);
173+ k = k + 12;
174+ len = len - 12;
175+ }
176
177+ /* handle the last 11 bytes */
178+ c = c + length;
179+ switch (len) { /* all the case statements fall through */
180+ case 11:
181+ c = c + ((uint32_t)k[10] << 24);
182+ case 10:
183+ c = c + ((uint32_t)k[9] << 16);
184+ case 9:
185+ c = c + ((uint32_t)k[8] << 8);
186+ /* the first byte of c is reserved for the length */
187+ case 8:
188+ b = b + ((uint32_t)k[7] << 24);
189+ case 7:
190+ b = b + ((uint32_t)k[6] << 16);
191+ case 6:
192+ b = b + ((uint32_t)k[5] << 8);
193+ case 5:
194+ b = b + k[4];
195+ case 4:
196+ a = a + ((uint32_t)k[3] << 24);
197+ case 3:
198+ a = a + ((uint32_t)k[2] << 16);
199+ case 2:
200+ a = a + ((uint32_t)k[1] << 8);
201+ case 1:
202+ a = a + k[0];
203+ /* case 0: nothing left to add */
204 }
205+ mix(a, b, c);
206
207- /* Do a few final mixes of the hash to ensure the last few
208- bytes are well-incorporated. */
209- hash ^= hash >> 13;
210- hash *= m;
211- hash ^= hash >> 15;
212+ return c;
213+}
214
215- return hash;
216+uint32_t fd_os_hash ( uint8_t * string, size_t len )
217+{
218+ return hash_rjenkins(string, len);
219 }
220
221--
2221.7.10.4
223
diff --git a/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf b/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf
new file mode 100644
index 000000000..7b56d748a
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf
@@ -0,0 +1,250 @@
1# This is a sample configuration file for freeDiameter daemon.
2
3# Most of the options can be omitted, as they default to reasonable values.
4# Only TLS-related options must be configured properly in usual setups.
5
6# It is possible to use "include" keyword to import additional files
7# e.g.: include "/etc/freeDiameter.d/*.conf"
8# This is exactly equivalent as copy & paste the content of the included file(s)
9# where the "include" keyword is found.
10
11
12##############################################################
13## Peer identity and realm
14
15# The Diameter Identity of this daemon.
16# This must be a valid FQDN that resolves to the local host.
17# Default: hostname's FQDN
18#Identity = "aaa.koganei.freediameter.net";
19
20# The Diameter Realm of this daemon.
21# Default: the domain part of Identity (after the first dot).
22#Realm = "koganei.freediameter.net";
23
24##############################################################
25## Transport protocol configuration
26
27# The port this peer is listening on for incoming connections (TCP and SCTP).
28# Default: 3868. Use 0 to disable.
29#Port = 3868;
30
31# The port this peer is listening on for incoming TLS-protected connections (TCP and SCTP).
32# See TLS_old_method for more information about TLS flavours.
33# Note: we use TLS/SCTP instead of DTLS/SCTP at the moment. This will change in future version of freeDiameter.
34# Default: 5868. Use 0 to disable.
35#SecPort = 5868;
36
37# Use RFC3588 method for TLS protection, where TLS is negociated after CER/CEA exchange is completed
38# on the unsecure connection. The alternative is RFC6733 mechanism, where TLS protects also the
39# CER/CEA exchange on a dedicated secure port.
40# This parameter only affects outgoing connections.
41# The setting can be also defined per-peer (see Peers configuration section).
42# Default: use RFC6733 method with separate port for TLS.
43#TLS_old_method;
44
45# Disable use of TCP protocol (only listen and connect over SCTP)
46# Default : TCP enabled
47#No_TCP;
48
49# Disable use of SCTP protocol (only listen and connect over TCP)
50# Default : SCTP enabled
51#No_SCTP;
52# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option.
53
54# Prefer TCP instead of SCTP for establishing new connections.
55# This setting may be overwritten per peer in peer configuration blocs.
56# Default : SCTP is attempted first.
57#Prefer_TCP;
58
59# Default number of streams per SCTP associations.
60# This setting may be overwritten per peer basis.
61# Default : 30 streams
62#SCTP_streams = 30;
63
64##############################################################
65## Endpoint configuration
66
67# Disable use of IP addresses (only IPv6)
68# Default : IP enabled
69#No_IP;
70
71# Disable use of IPv6 addresses (only IP)
72# Default : IPv6 enabled
73#No_IPv6;
74
75# Specify local addresses the server must bind to
76# Default : listen on all addresses available.
77#ListenOn = "202.249.37.5";
78#ListenOn = "2001:200:903:2::202:1";
79#ListenOn = "fe80::21c:5ff:fe98:7d62%eth0";
80
81
82##############################################################
83## Server configuration
84
85# How many Diameter peers are allowed to be connecting at the same time ?
86# This parameter limits the number of incoming connections from the time
87# the connection is accepted until the first CER is received.
88# Default: 5 unidentified clients in paralel.
89#ThreadsPerServer = 5;
90
91##############################################################
92## TLS Configuration
93
94# TLS is managed by the GNUTLS library in the freeDiameter daemon.
95# You may find more information about parameters and special behaviors
96# in the relevant documentation.
97# http://www.gnu.org/software/gnutls/manual/
98
99# Credentials of the local peer
100# The X509 certificate and private key file to use for the local peer.
101# The files must contain PKCS-1 encoded RSA key, in PEM format.
102# (These parameters are passed to gnutls_certificate_set_x509_key_file function)
103# Default : NO DEFAULT
104#TLS_Cred = "<x509 certif file.PEM>" , "<x509 private key file.PEM>";
105#TLS_Cred = "/etc/ssl/certs/freeDiameter.pem", "/etc/ssl/private/freeDiameter.key";
106
107# Certificate authority / trust anchors
108# The file containing the list of trusted Certificate Authorities (PEM list)
109# (This parameter is passed to gnutls_certificate_set_x509_trust_file function)
110# The directive can appear several times to specify several files.
111# Default : GNUTLS default behavior
112#TLS_CA = "<file.PEM>";
113
114# Certificate Revocation List file
115# The information about revoked certificates.
116# The file contains a list of trusted CRLs in PEM format. They should have been verified before.
117# (This parameter is passed to gnutls_certificate_set_x509_crl_file function)
118# Note: openssl CRL format might have interoperability issue with GNUTLS format.
119# Default : GNUTLS default behavior
120#TLS_CRL = "<file.PEM>";
121
122# GNU TLS Priority string
123# This string allows to configure the behavior of GNUTLS key exchanges
124# algorithms. See gnutls_priority_init function documentation for information.
125# You should also refer to the Diameter required TLS support here:
126# http://tools.ietf.org/html/rfc6733#section-13.1
127# Default : "NORMAL"
128# Example: TLS_Prio = "NONE:+VERS-TLS1.1:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL";
129#TLS_Prio = "NORMAL";
130
131# Diffie-Hellman parameters size
132# Set the number of bits for generated DH parameters
133# Valid value should be 768, 1024, 2048, 3072 or 4096.
134# (This parameter is passed to gnutls_dh_params_generate2 function,
135# it usually should match RSA key size)
136# Default : 1024
137#TLS_DH_Bits = 1024;
138
139# Alternatively, you can specify a file to load the PKCS#3 encoded
140# DH parameters directly from. This accelerates the daemon start
141# but is slightly less secure. If this file is provided, the
142# TLS_DH_Bits parameters has no effect.
143# Default : no default.
144#TLS_DH_File = "<file.PEM>";
145
146
147##############################################################
148## Timers configuration
149
150# The Tc timer of this peer.
151# It is the delay before a new attempt is made to reconnect a disconnected peer.
152# The value is expressed in seconds. The recommended value is 30 seconds.
153# Default: 30
154#TcTimer = 30;
155
156# The Tw timer of this peer.
157# It is the delay before a watchdog message is sent, as described in RFC 3539.
158# The value is expressed in seconds. The default value is 30 seconds. Value must
159# be greater or equal to 6 seconds. See details in the RFC.
160# Default: 30
161#TwTimer = 30;
162
163##############################################################
164## Applications configuration
165
166# Disable the relaying of Diameter messages?
167# For messages not handled locally, the default behavior is to forward the
168# message to another peer if any is available, according to the routing
169# algorithms. In addition the "0xffffff" application is advertised in CER/CEA
170# exchanges.
171# Default: Relaying is enabled.
172#NoRelay;
173
174# Number of server threads that can handle incoming messages at the same time.
175# Default: 4
176#AppServThreads = 4;
177
178# Other applications are configured by loaded extensions.
179
180##############################################################
181## Extensions configuration
182
183# The freeDiameter framework merely provides support for
184# Diameter Base Protocol. The specific application behaviors,
185# as well as advanced functions, are provided
186# by loadable extensions (plug-ins).
187# These extensions may in addition receive the name of a
188# configuration file, the format of which is extension-specific.
189#
190# Format:
191#LoadExtension = "/path/to/extension" [ : "/optional/configuration/file" ] ;
192#
193# Examples:
194#LoadExtension = "extensions/sample.fdx";
195#LoadExtension = "extensions/sample.fdx":"conf/sample.conf";
196
197# Extensions are named as follow:
198# dict_* for extensions that add content to the dictionary definitions.
199# dbg_* for extensions useful only to retrieve more information on the framework execution.
200# acl_* : Access control list, to control which peers are allowed to connect.
201# rt_* : routing extensions that impact how messages are forwarded to other peers.
202# app_* : applications, these extensions usually register callbacks to handle specific messages.
203# test_* : dummy extensions that are useful only in testing environments.
204
205
206# The dbg_msg_dump.fdx extension allows you to tweak the way freeDiameter displays some
207# information about some events. This extension does not actually use a configuration file
208# but receives directly a parameter in the string passed to the extension. Here are some examples:
209## LoadExtension = "dbg_msg_dumps.fdx" : "0x1111"; # Removes all default hooks, very quiet even in case of errors.
210## LoadExtension = "dbg_msg_dumps.fdx" : "0x2222"; # Display all events with few details.
211## LoadExtension = "dbg_msg_dumps.fdx" : "0x0080"; # Dump complete information about sent and received messages.
212# The four digits respectively control: connections, routing decisions, sent/received messages, errors.
213# The values for each digit are:
214# 0 - default - keep the default behavior
215# 1 - quiet - remove any specific log
216# 2 - compact - display only a summary of the information
217# 4 - full - display the complete information on a single long line
218# 8 - tree - display the complete information in an easier to read format spanning several lines.
219
220
221##############################################################
222## Peers configuration
223
224# The local server listens for incoming connections. By default,
225# all unknown connecting peers are rejected. Extensions can override this behavior (e.g., acl_wl).
226#
227# In addition to incoming connections, the local peer can
228# be configured to establish and maintain connections to some
229# Diameter nodes and allow connections from these nodes.
230# This is achieved with the ConnectPeer directive described below.
231#
232# Note that the configured Diameter Identity MUST match
233# the information received inside CEA, or the connection will be aborted.
234#
235# Format:
236#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
237# Parameters that can be specified in the peer's parameter list:
238# No_TCP; No_SCTP; No_IP; No_IPv6; Prefer_TCP; TLS_old_method;
239# No_TLS; # assume transparent security instead of TLS. DTLS is not supported yet (will change in future versions).
240# Port = 5868; # The port to connect to
241# TcTimer = 30;
242# TwTimer = 30;
243# ConnectTo = "202.249.37.5";
244# ConnectTo = "2001:200:903:2::202:1";
245# TLS_Prio = "NORMAL";
246# Realm = "realm.net"; # Reject the peer if it does not advertise this realm.
247# Examples:
248#ConnectPeer = "aaa.wide.ad.jp";
249#ConnectPeer = "old.diameter.serv" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ;
250##############################################################
diff --git a/meta-networking/recipes-protocols/freediameter/files/freediameter.init b/meta-networking/recipes-protocols/freediameter/files/freediameter.init
new file mode 100755
index 000000000..e63a42a7c
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/freediameter.init
@@ -0,0 +1,72 @@
1#!/bin/sh
2#
3### BEGIN INIT INFO
4# Provides: freediameter
5# Default-Start: 2 3 4 5
6# Default-Stop: 0 1 6
7# Required-Start: $remote_fs $syslog
8# Required-Stop: $remote_fs $syslog
9# Short-Description: Start freeDiameter daemon at boot time
10# Description: Start the freeDiameter daemon at boot time.
11# freeDiameter is an extensible implementation of the Diameter protocol,
12# designed for Authentication, Authorization and Accounting. Diameter is
13# an evolution of the RADIUS protocol.
14### END INIT INFO#
15DAEMON=/usr/bin/freeDiameterd
16CONF=/etc/freeDiameter/freeDiameter.conf
17NAME=freediameter
18DESC="freeDiameter daemon"
19
20. /etc/init.d/functions
21start() {
22 [ -x $DAEMON ] || exit 5
23 echo -n $"Starting $DAEMON: "
24 start-stop-daemon -S -b -x ${DAEMON} && success || failure
25 retval=$?
26 echo ""
27 return $retval
28}
29
30stop() {
31 echo -n $"Stopping $prog: "
32 start-stop-daemon -K -x $DAEMON
33 retval=$?
34 echo ""
35 return $retval
36}
37
38restart() {
39 stop
40 sleep 3
41 start
42}
43
44rh_status() {
45 status $DAEMON
46}
47
48rh_status_q() {
49 rh_status > /dev/null 2>&1
50}
51
52case "$1" in
53 start)
54 rh_status_q && exit 0
55 start
56 ;;
57 stop)
58 rh_status_q || exit 0
59 stop
60 ;;
61 restart)
62 restart
63 ;;
64 status)
65 rh_status
66 ;;
67 *)
68 echo $"Usage: $prog {start|stop|status|restart}"
69 exit 2
70esac
71
72exit $?
diff --git a/meta-networking/recipes-protocols/freediameter/files/freediameter.service b/meta-networking/recipes-protocols/freediameter/files/freediameter.service
new file mode 100644
index 000000000..514481b43
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/freediameter.service
@@ -0,0 +1,11 @@
1[Unit]
2Description=freediameter daemon
3After=network.target
4
5[Service]
6Type=simple
7PIDFile=/var/run/freediameter.pid
8ExecStart=@BINDIR@/freeDiameterd
9
10[Install]
11WantedBy=multi-user.target
diff --git a/meta-networking/recipes-protocols/freediameter/files/install_test.patch b/meta-networking/recipes-protocols/freediameter/files/install_test.patch
new file mode 100644
index 000000000..151037d69
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/install_test.patch
@@ -0,0 +1,22 @@
1CMakeLists: add an option to install tests
2
3Upstream-Status: Inappropriate [OE ptest specific]
4
5Original author: Yao Zhao <yao.zhao@windriver.com>
6Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
7
8diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
9index da8da1b..de04059 100644
10--- a/tests/CMakeLists.txt
11+++ b/tests/CMakeLists.txt
12@@ -113,4 +113,9 @@ ENDFOREACH( TEST )
13 ####
14 ## INSTALL section ##
15
16-# we do not install the tests
17+# install the tests
18+SET(INSTALL_TEST_SUFFIX /opt/${FD_PROJECT_NAME}-tests CACHE PATH "Directory where the test binary is installed.")
19+
20+INSTALL(TARGETS ${TEST_LIST}
21+ RUNTIME DESTINATION ${INSTALL_TEST_SUFFIX}
22+ COMPONENT freeDiameter-common)
diff --git a/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch b/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
new file mode 100644
index 000000000..ea857af7d
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
@@ -0,0 +1,72 @@
1freediameter ptest cases testmesg_stress.c and testloadext.c need load
2extensions both build time and runtime. Then they search extensions with
3build directory that causes runtime failures.
4
5Pass an environment variable to define runtime extension path.
6
7Upstream-Status: Inappropriate [OE ptest specific]
8
9Signed-off-by: Kai Kang <kai.kang@windriver.com>
10Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
11
12diff -Nur freeDiameter-1.2.0.orig/tests/testloadext.c freeDiameter-1.2.0/tests/testloadext.c
13--- freeDiameter-1.2.0.orig/tests/testloadext.c 2014-02-19 17:33:24.785405032 +0800
14+++ freeDiameter-1.2.0/tests/testloadext.c 2014-02-19 20:08:03.871403924 +0800
15@@ -49,7 +49,7 @@
16 {
17 DIR *dir;
18 struct dirent *dp;
19- char fullname[512];
20+ char fullname[1024];
21 int pathlen;
22
23 /* First, initialize the daemon modules */
24@@ -57,11 +57,16 @@
25 CHECK( 0, fd_queues_init() );
26 CHECK( 0, fd_msg_init() );
27 CHECK( 0, fd_rtdisp_init() );
28-
29+
30+ char *ext_dir = getenv("EXTENSIONS_DIR");
31+ if (ext_dir)
32+ pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
33+ else
34+ pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
35+
36 /* Find all extensions which have been compiled along the test */
37- TRACE_DEBUG(INFO, "Loading from: '%s'", BUILD_DIR "/extensions");
38- CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
39- pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
40+ TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
41+ CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
42
43 while ((dp = readdir (dir)) != NULL) {
44 char * dot = strrchr(dp->d_name, '.');
45diff -Nur freeDiameter-1.2.0.orig/tests/testmesg_stress.c freeDiameter-1.2.0/tests/testmesg_stress.c
46--- freeDiameter-1.2.0.orig/tests/testmesg_stress.c 2014-02-19 17:33:24.785405032 +0800
47+++ freeDiameter-1.2.0/tests/testmesg_stress.c 2014-02-19 20:08:03.928403924 +0800
48@@ -67,15 +67,20 @@
49 {
50 DIR *dir;
51 struct dirent *dp;
52- char fullname[512];
53+ char fullname[1024];
54 int pathlen;
55 struct fd_list all_extensions = FD_LIST_INITIALIZER(all_extensions);
56 struct fd_list ext_with_depends = FD_LIST_INITIALIZER(ext_with_depends);
57
58+ char *ext_dir = getenv("EXTENSIONS_DIR");
59+ if (ext_dir)
60+ pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
61+ else
62+ pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
63+
64 /* Find all extensions which have been compiled along the test */
65- LOG_D("Loading %s*.fdx from: '%s'", BUILD_DIR "/extensions", prefix ?: "");
66- CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
67- pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
68+ TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
69+ CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
70
71 while ((dp = readdir (dir)) != NULL) {
72 char * dot = strrchr(dp->d_name, '.');
diff --git a/meta-networking/recipes-protocols/freediameter/files/run-ptest b/meta-networking/recipes-protocols/freediameter/files/run-ptest
new file mode 100644
index 000000000..d0ca8d962
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/files/run-ptest
@@ -0,0 +1,11 @@
1#!/bin/sh
2
3if ! lsmod | grep -q sctp && ! modprobe sctp 2>/dev/null; then
4 echo "Couldn't load kernel module sctp."
5 echo "Test cases testsctp and testcnx will fail."
6 echo
7fi
8
9export EXTENSIONS_DIR=$EXTENSIONS_DIR
10cmake -E cmake_echo_color --cyan "Running tests..."
11ctest --force-new-ctest-process
diff --git a/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb b/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
new file mode 100644
index 000000000..92cd24c3a
--- /dev/null
+++ b/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
@@ -0,0 +1,136 @@
1SUMMARY = "An open source implementation of the diameter protocol"
2DESCRIPTION = "\
3freeDiameter is an open source Diameter protocol implementation \
4(RFC3588). It provides an extensible platform for deploying a \
5Diameter network for your Authentication, Authorization and \
6Accounting needs."
7
8HOMEPAGE = "http://www.freediameter.net"
9
10DEPENDS = "flex bison cmake-native libgcrypt gnutls libidn lksctp-tools"
11
12fd_pkgname = "freeDiameter"
13
14SRC_URI = "\
15 http://www.freediameter.net/hg/${fd_pkgname}/archive/${PV}.tar.gz;downloadfilename=${fd_pkgname}-${PV}.tar.gz \
16 file://Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch \
17 file://freediameter.service \
18 file://freediameter.init \
19 ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'file://install_test.patch file://run-ptest file://pass-ptest-env.patch', '', d)} \
20 file://freeDiameter.conf \
21 "
22
23SRC_URI[md5sum] = "61b1062aa144b5f12eed514611e6d697"
24SRC_URI[sha256sum] = "bd7f105542e9903e776aa006c6931c1f5d3d477cb59af33a9162422efa477097"
25
26S = "${WORKDIR}/${fd_pkgname}-${PV}"
27
28LICENSE = "BSD"
29LIC_FILES_CHKSUM = "file://LICENSE;md5=892b2ed6ae815488a08416ff7ee74a35"
30
31PTEST_PATH = "${libdir}/${fd_pkgname}/ptest"
32
33inherit cmake pkgconfig update-rc.d ptest systemd
34
35EXTRA_OECMAKE = " \
36 -DDEFAULT_CONF_PATH:PATH=${sysconfdir}/${fd_pkgname} \
37 -DBUILD_DBG_MONITOR:BOOL=ON \
38 -DBUILD_TEST_APP:BOOL=ON \
39 -DBUILD_TESTING:BOOL=ON \
40 -DBUILD_APP_RADGW:BOOL=ON \
41 -DBUILD_APP_REDIRECT:BOOL=ON \
42 -DBUILD_TEST_ACCT:BOOL=ON \
43 -DBUILD_TEST_NETEMUL:BOOL=ON \
44 -DBUILD_TEST_RT_ANY:BOOL=ON \
45 -DINSTALL_LIBRARY_SUFFIX:PATH=${baselib} \
46 -DINSTALL_EXTENSIONS_SUFFIX:PATH=${baselib}/${fd_pkgname} \
47 -DINSTALL_TEST_SUFFIX:PATH=${PTEST_PATH}-tests \
48 -DCMAKE_SKIP_RPATH:BOOL=ON \
49"
50# INSTALL_LIBRARY_SUFFIX is relative to CMAKE_INSTALL_PREFIX
51# specify it on cmd line will fix the SET bug in CMakeList.txt
52
53# -DBUILD_APP_ACCT:BOOL=ON This needs POSTGRESQL support
54
55# -DBUILD_APP_DIAMEAP:BOOL=ON -DBUILD_APP_SIP:BOOL=ON -DBUILD_TEST_SIP:BOOL=ON
56# These need MySQL support
57
58# -DBUILD_DBG_INTERACTIVE:BOOL=ON This needs SWIG support
59
60# -DALL_EXTENSIONS=ON will enable all
61
62FD_KEY ?="${BPN}.key"
63FD_PEM ?= "${BPN}.pem"
64FD_CA ?= "${BPN}.pem"
65FD_DH_PEM ?= "${BPN}-dh.pem"
66FD_HOSTNAME ?= "${MACHINE}"
67FD_REALM ?= "openembedded.org"
68
69do_install_append() {
70 # install the sample configuration files
71 install -d -m 0755 ${D}${sysconfdir}/${fd_pkgname}
72 for i in ${S}/doc/*.conf.sample; do
73 install -m 0644 $i ${D}${sysconfdir}/${fd_pkgname}/
74 done
75 mv ${D}${sysconfdir}/${fd_pkgname}/freediameter.conf.sample \
76 ${D}${sysconfdir}/${fd_pkgname}/freeDiameter.conf.sample
77 install -d ${D}${sysconfdir}/freeDiameter
78 install ${WORKDIR}/freeDiameter.conf ${D}${sysconfdir}/${fd_pkgname}/freeDiameter.conf
79
80 # install daemon init related files
81 install -d -m 0755 ${D}${sysconfdir}/default
82 install -d -m 0755 ${D}${sysconfdir}/init.d
83 install -m 0644 ${S}/contrib/debian/freediameter-daemon.default \
84 ${D}${sysconfdir}/default/${BPN}
85 install -m 0755 ${WORKDIR}/freediameter.init ${D}${sysconfdir}/init.d/${BPN}
86
87 # install for systemd
88 install -d ${D}${systemd_system_unitdir}
89 install -m 0644 ${WORKDIR}/freediameter.service ${D}${systemd_system_unitdir}
90 sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/*.service
91
92 cat >> ${D}${sysconfdir}/freeDiameter/freeDiameter.conf <<EOF
93## OE specific ##
94#Identity="${FD_HOSTNAME}";
95Identity = "${FD_HOSTNAME}.${FD_REALM}";
96Realm = "${FD_REALM}";
97Port = 30868;
98SecPort = 30869;
99TLS_Cred = "/etc/freeDiameter/${FD_PEM}" , "/etc/freeDiameter/${FD_KEY}";
100TLS_CA = "/etc/freeDiameter/${FD_CA}";
101TLS_DH_File = "/etc/freeDiameter/${FD_DH_PEM}";
102EOF
103
104 # create self cert
105 openssl req -x509 -config ${STAGING_DIR_NATIVE}/etc/ssl/openssl.cnf -newkey rsa:4096 -sha256 -nodes -out ${D}${sysconfdir}/freeDiameter/${FD_PEM} -keyout ${D}${sysconfdir}/freeDiameter/${FD_KEY} -days 3650 -subj '/CN=${FD_HOSTNAME}.${FD_REALM}'
106 openssl dhparam -out ${D}${sysconfdir}/freeDiameter/${FD_DH_PEM} 1024
107
108}
109
110do_install_ptest() {
111 sed -i "s#\(EXTENSIONS_DIR=\).*\$#\1${libdir}/${fd_pkgname}/#" ${D}${PTEST_PATH}/run-ptest
112 mv ${D}${PTEST_PATH}-tests/* ${D}${PTEST_PATH}/
113 rmdir ${D}${PTEST_PATH}-tests
114 install -m 0644 ${B}/tests/CTestTestfile.cmake ${D}${PTEST_PATH}/
115}
116
117FILES_${PN}-dbg += "${libdir}/${fd_pkgname}/.debug/*"
118
119# include the extensions in main package
120FILES_${PN} += "${libdir}/${fd_pkgname}/*"
121
122RDEPENDS_${PN} = "glib-2.0 gnutls libidn"
123RDEPENDS_${PN} += "openssl openssl-conf openssl-engines"
124RDEPENDS_${PN} += "kernel-module-tipc kernel-module-sctp"
125RDEPENDS_${PN} += "kernel-module-udp-tunnel kernel-module-ipip"
126RDEPENDS_${PN}-ptest = "cmake"
127
128INITSCRIPT_PACKAGES = "${PN}"
129INITSCRIPT_NAME_${PN} = "${BPN}"
130INITSCRIPT_PARAMS$_${PN} = "start 30 . stop 70 0 1 2 3 4 5 6 ."
131
132SYSTEMD_SERVICE_${PN} = "freediameter.service"
133SYSTEMD_AUTO_ENABLE = "disable"
134
135CONFFILES_${PN} = "${sysconfdir}/freediameter.conf"
136