On 10/31/2017 06:21 AM, Joe MacDonald wrote:
> [Re: [oe] [meta-networking][PATCH 3/6] freediameter: add new recipe] On 
> 17.10.30 (Mon 17:47) akuster808 wrote:
>
>>
>> On 10/30/2017 11:11 AM, Joe MacDonald wrote:
>>> From: Jackie Huang <jackie.hu...@windriver.com>
>>>
>>> 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.hu...@windriver.com>
>>> Signed-off-by: Joe MacDonald <joe_macdon...@mentor.com>
>> If you want this in meta-networking, please send a patch to remove it
>> from meta-security.
> I never even thought of looking for it in meta-security.  Since I've
> always encountered it in the CGL space it just never occurred, and since
> the patch was still apparently active in patchwork, I just assumed it'd
> been lost.
>
> Do you (or anyone else using the layers) have a preference for what we
> do with the recipe? 
Meta-networking is fine by me.

-Armin
>  Unfortunately at a glance they look at least a bit
> different from each other, so if I'm going to include it in
> meta-networking I'll want to review what's in meta-security first to
> determine what changes are appropriate to the meta-networking version.
>
> -J.
>
>> - armin
>>> ---
>>>  ...murhash-algorithm-with-Robert-Jenkin-s-ha.patch | 223 
>>> +++++++++++++++++++++
>>>  .../freediameter/files/freediameter.init           |  72 +++++++
>>>  .../freediameter/files/freediameter.service        |  11 +
>>>  .../freediameter/files/install_test.patch          |  22 ++
>>>  .../freediameter/files/pass-ptest-env.patch        |  72 +++++++
>>>  .../recipes-protocols/freediameter/files/run-ptest |  11 +
>>>  .../freediameter/freediameter.inc                  |  98 +++++++++
>>>  .../freediameter/freediameter_1.2.1.bb             |   7 +
>>>  8 files changed, 516 insertions(+)
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
>>>  create mode 100755 
>>> meta-networking/recipes-protocols/freediameter/files/freediameter.init
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/files/freediameter.service
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/files/install_test.patch
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/files/run-ptest
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/freediameter.inc
>>>  create mode 100644 
>>> meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
>>>
>>> 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 0000000..71a5a1a
>>> --- /dev/null
>>> +++ 
>>> b/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
>>> @@ -0,0 +1,223 @@
>>> +Replace murmurhash algorithm with Robert Jenkin's hash algorithm
>>> +
>>> +Upstream-Status: Pending
>>> +
>>> +From test result, murmurhash algorithm does not work in big endian
>>> +processor, so replace it with Robert Jenkin's hash which has worked
>>> +in linux kernel for many years and has more adaptability.
>>> +
>>> +Signed-off-by: Roy.Li <rongqing...@windriver.com>
>>> +---
>>> + libfdproto/ostr.c |  192 
>>> +++++++++++++++++++++--------------------------------
>>> + 1 file changed, 74 insertions(+), 118 deletions(-)
>>> +
>>> +diff --git a/libfdproto/ostr.c b/libfdproto/ostr.c
>>> +index 8f29b48..ce1f4dd 100644
>>> +--- a/libfdproto/ostr.c
>>> ++++ b/libfdproto/ostr.c
>>> +@@ -430,128 +430,84 @@ after_proto:
>>> + 
>>> + 
>>> + 
>>> /********************************************************************************************************/
>>> +-/* Hash function -- credits to Austin Appleby, thank you ^^ */
>>> +-/* See http://murmurhash.googlepages.com for more information on this 
>>> function */
>>> +-
>>> +-/* the strings are NOT always aligned properly (ex: received in RADIUS 
>>> message), so we use the aligned MurmurHash2 function as needed */
>>> +-#define _HASH_MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
>>> +-uint32_t fd_os_hash ( uint8_t * string, size_t len )
>>> ++/*
>>> ++ * Robert Jenkin's hash function.
>>> ++ * http://burtleburtle.net/bob/hash/evahash.html
>>> ++ * This is in the public domain.
>>> ++ */
>>> ++#define mix(a, b, c)                                              \
>>> ++  do {                                                    \
>>> ++          a = a - b;  a = a - c;  a = a ^ (c >> 13);      \
>>> ++          b = b - c;  b = b - a;  b = b ^ (a << 8);       \
>>> ++          c = c - a;  c = c - b;  c = c ^ (b >> 13);      \
>>> ++          a = a - b;  a = a - c;  a = a ^ (c >> 12);      \
>>> ++          b = b - c;  b = b - a;  b = b ^ (a << 16);      \
>>> ++          c = c - a;  c = c - b;  c = c ^ (b >> 5);       \
>>> ++          a = a - b;  a = a - c;  a = a ^ (c >> 3);       \
>>> ++          b = b - c;  b = b - a;  b = b ^ (a << 10);      \
>>> ++          c = c - a;  c = c - b;  c = c ^ (b >> 15);      \
>>> ++  } while (0)
>>> ++
>>> ++unsigned hash_rjenkins(const char *str, unsigned length)
>>> + {
>>> +-  uint32_t hash = len;
>>> +-  uint8_t * data = string;
>>> +-  
>>> +-  const unsigned int m = 0x5bd1e995;
>>> +-  const int r = 24;
>>> +-  int align = (long)string & 3;
>>> +-  
>>> +-  if (!align || (len < 4)) {
>>> +-          /* In case data is aligned, MurmurHash2 function */
>>> +-          while(len >= 4)
>>> +-          {
>>> +-                  /* Mix 4 bytes at a time into the hash */
>>> +-                  uint32_t k = *(uint32_t *)data; /* We don't care about 
>>> the byte order */
>>> +-
>>> +-                  _HASH_MIX(hash, k, m);
>>> +-
>>> +-                  data += 4;
>>> +-                  len -= 4;
>>> +-          }
>>> +-
>>> +-          /* Handle the last few bytes of the input */
>>> +-          switch(len) {
>>> +-                  case 3: hash ^= data[2] << 16;
>>> +-                  case 2: hash ^= data[1] << 8;
>>> +-                  case 1: hash ^= data[0];
>>> +-                          hash *= m;
>>> +-          }
>>> +-          
>>> +-  } else {
>>> +-          /* Unaligned data, use alignment-safe slower version */
>>> +-          
>>> +-          /* Pre-load the temp registers */
>>> +-          uint32_t t = 0, d = 0;
>>> +-          switch(align)
>>> +-          {
>>> +-                  case 1: t |= data[2] << 16;
>>> +-                  case 2: t |= data[1] << 8;
>>> +-                  case 3: t |= data[0];
>>> +-          }
>>> +-          t <<= (8 * align);
>>> +-
>>> +-          data += 4-align;
>>> +-          len -= 4-align;
>>> +-          
>>> +-          /* From this point, "data" can be read by chunks of 4 bytes */
>>> +-          
>>> +-          int sl = 8 * (4-align);
>>> +-          int sr = 8 * align;
>>> +-
>>> +-          /* Mix */
>>> +-          while(len >= 4)
>>> +-          {
>>> +-                  uint32_t k;
>>> +-                  
>>> +-                  d = *(unsigned int *)data;
>>> +-                  k = (t >> sr) | (d << sl);
>>> +-
>>> +-                  _HASH_MIX(hash, k, m);
>>> +-
>>> +-                  t = d;
>>> +-
>>> +-                  data += 4;
>>> +-                  len -= 4;
>>> +-          }
>>> +-
>>> +-          /* Handle leftover data in temp registers */
>>> +-          d = 0;
>>> +-          if(len >= align)
>>> +-          {
>>> +-                  uint32_t k;
>>> +-                  
>>> +-                  switch(align)
>>> +-                  {
>>> +-                  case 3: d |= data[2] << 16;
>>> +-                  case 2: d |= data[1] << 8;
>>> +-                  case 1: d |= data[0];
>>> +-                  }
>>> +-
>>> +-                  k = (t >> sr) | (d << sl);
>>> +-                  _HASH_MIX(hash, k, m);
>>> +-
>>> +-                  data += align;
>>> +-                  len -= align;
>>> +-
>>> +-                  /* Handle tail bytes */
>>> +-
>>> +-                  switch(len)
>>> +-                  {
>>> +-                  case 3: hash ^= data[2] << 16;
>>> +-                  case 2: hash ^= data[1] << 8;
>>> +-                  case 1: hash ^= data[0];
>>> +-                                  hash *= m;
>>> +-                  };
>>> +-          }
>>> +-          else
>>> +-          {
>>> +-                  switch(len)
>>> +-                  {
>>> +-                  case 3: d |= data[2] << 16;
>>> +-                  case 2: d |= data[1] << 8;
>>> +-                  case 1: d |= data[0];
>>> +-                  case 0: hash ^= (t >> sr) | (d << sl);
>>> +-                                  hash *= m;
>>> +-                  }
>>> +-          }
>>> +-
>>> ++  const unsigned char *k = (const unsigned char *)str;
>>> ++  uint32_t a, b, c;  /* the internal state */
>>> ++  uint32_t len;      /* how many key bytes still need mixing */
>>> ++
>>> ++  /* Set up the internal state */
>>> ++  len = length;
>>> ++  a = 0x9e3779b9;      /* the golden ratio; an arbitrary value */
>>> ++  b = a;
>>> ++  c = 0;               /* variable initialization of internal state */
>>> ++
>>> ++  /* handle most of the key */
>>> ++  while (len >= 12) {
>>> ++          a = a + (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16) +
>>> ++                   ((uint32_t)k[3] << 24));
>>> ++          b = b + (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16) +
>>> ++                   ((uint32_t)k[7] << 24));
>>> ++          c = c + (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16) 
>>> +
>>> ++                   ((uint32_t)k[11] << 24));
>>> ++          mix(a, b, c);
>>> ++          k = k + 12;
>>> ++          len = len - 12;
>>> ++  }
>>> + 
>>> ++  /* handle the last 11 bytes */
>>> ++  c = c + length;
>>> ++  switch (len) {            /* all the case statements fall through */
>>> ++  case 11:
>>> ++          c = c + ((uint32_t)k[10] << 24);
>>> ++  case 10:
>>> ++          c = c + ((uint32_t)k[9] << 16);
>>> ++  case 9:
>>> ++          c = c + ((uint32_t)k[8] << 8);
>>> ++          /* the first byte of c is reserved for the length */
>>> ++  case 8:
>>> ++          b = b + ((uint32_t)k[7] << 24);
>>> ++  case 7:
>>> ++          b = b + ((uint32_t)k[6] << 16);
>>> ++  case 6:
>>> ++          b = b + ((uint32_t)k[5] << 8);
>>> ++  case 5:
>>> ++          b = b + k[4];
>>> ++  case 4:
>>> ++          a = a + ((uint32_t)k[3] << 24);
>>> ++  case 3:
>>> ++          a = a + ((uint32_t)k[2] << 16);
>>> ++  case 2:
>>> ++          a = a + ((uint32_t)k[1] << 8);
>>> ++  case 1:
>>> ++          a = a + k[0];
>>> ++          /* case 0: nothing left to add */
>>> +   }
>>> ++  mix(a, b, c);
>>> + 
>>> +-  /* Do a few final mixes of the hash to ensure the last few
>>> +-     bytes are well-incorporated. */
>>> +-  hash ^= hash >> 13;
>>> +-  hash *= m;
>>> +-  hash ^= hash >> 15;
>>> ++  return c;
>>> ++}
>>> + 
>>> +-  return hash;
>>> ++uint32_t fd_os_hash ( uint8_t * string, size_t len )
>>> ++{
>>> ++  return hash_rjenkins(string, len); 
>>> + } 
>>> + 
>>> +-- 
>>> +1.7.10.4
>>> +
>>> 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 0000000..e63a42a
>>> --- /dev/null
>>> +++ b/meta-networking/recipes-protocols/freediameter/files/freediameter.init
>>> @@ -0,0 +1,72 @@
>>> +#!/bin/sh
>>> +#
>>> +### BEGIN INIT INFO
>>> +# Provides:          freediameter
>>> +# Default-Start:     2 3 4 5
>>> +# Default-Stop:      0 1 6
>>> +# Required-Start:    $remote_fs $syslog
>>> +# Required-Stop:     $remote_fs $syslog
>>> +# Short-Description: Start freeDiameter daemon at boot time
>>> +# Description:       Start the freeDiameter daemon at boot time.
>>> +#       freeDiameter is an extensible implementation of the Diameter 
>>> protocol,
>>> +#       designed for Authentication, Authorization and Accounting. 
>>> Diameter is
>>> +#       an evolution of the RADIUS protocol.
>>> +### END INIT INFO#
>>> +DAEMON=/usr/bin/freeDiameterd
>>> +CONF=/etc/freeDiameter/freeDiameter.conf
>>> +NAME=freediameter
>>> +DESC="freeDiameter daemon"
>>> +
>>> +. /etc/init.d/functions
>>> +start() {
>>> +   [ -x $DAEMON ] || exit 5
>>> +   echo -n $"Starting $DAEMON: "
>>> +   start-stop-daemon -S -b -x ${DAEMON} && success || failure
>>> +   retval=$?
>>> +   echo ""
>>> +   return $retval
>>> +}
>>> +
>>> +stop() {
>>> +   echo -n $"Stopping $prog: "
>>> +   start-stop-daemon -K -x $DAEMON
>>> +   retval=$?
>>> +   echo ""
>>> +   return $retval
>>> +}
>>> +
>>> +restart() {
>>> +   stop
>>> +   sleep 3
>>> +   start
>>> +}
>>> +
>>> +rh_status() {
>>> +   status $DAEMON
>>> +}
>>> +
>>> +rh_status_q() {
>>> +   rh_status > /dev/null 2>&1
>>> +}
>>> +
>>> +case "$1" in
>>> +  start)
>>> +   rh_status_q && exit 0
>>> +   start
>>> +   ;;
>>> +  stop)
>>> +   rh_status_q || exit 0
>>> +   stop
>>> +   ;;
>>> +  restart)
>>> +   restart
>>> +   ;;
>>> +  status)
>>> +   rh_status
>>> +   ;;
>>> +  *)
>>> +   echo $"Usage: $prog {start|stop|status|restart}"
>>> +   exit 2
>>> +esac
>>> +
>>> +exit $?
>>> 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 0000000..514481b
>>> --- /dev/null
>>> +++ 
>>> b/meta-networking/recipes-protocols/freediameter/files/freediameter.service
>>> @@ -0,0 +1,11 @@
>>> +[Unit]
>>> +Description=freediameter daemon
>>> +After=network.target
>>> +
>>> +[Service]
>>> +Type=simple
>>> +PIDFile=/var/run/freediameter.pid
>>> +ExecStart=@BINDIR@/freeDiameterd
>>> +
>>> +[Install]
>>> +WantedBy=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 0000000..151037d
>>> --- /dev/null
>>> +++ 
>>> b/meta-networking/recipes-protocols/freediameter/files/install_test.patch
>>> @@ -0,0 +1,22 @@
>>> +CMakeLists: add an option to install tests
>>> +
>>> +Upstream-Status: Inappropriate [OE ptest specific]
>>> +
>>> +Original author: Yao Zhao <yao.z...@windriver.com>
>>> +Signed-off-by: Jackie Huang <jackie.hu...@windriver.com>
>>> +
>>> +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
>>> +index da8da1b..de04059 100644
>>> +--- a/tests/CMakeLists.txt
>>> ++++ b/tests/CMakeLists.txt
>>> +@@ -113,4 +113,9 @@ ENDFOREACH( TEST )
>>> + ####
>>> + ## INSTALL section ##
>>> + 
>>> +-# we do not install the tests
>>> ++# install the tests
>>> ++SET(INSTALL_TEST_SUFFIX       /opt/${FD_PROJECT_NAME}-tests   CACHE PATH 
>>> "Directory where the test binary is installed.")
>>> ++
>>> ++INSTALL(TARGETS ${TEST_LIST}
>>> ++        RUNTIME DESTINATION ${INSTALL_TEST_SUFFIX}
>>> ++        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 0000000..ea857af
>>> --- /dev/null
>>> +++ 
>>> b/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
>>> @@ -0,0 +1,72 @@
>>> +freediameter ptest cases testmesg_stress.c and testloadext.c need load
>>> +extensions both build time and runtime. Then they search extensions with
>>> +build directory that causes runtime failures.
>>> +
>>> +Pass an environment variable to define runtime extension path.
>>> +
>>> +Upstream-Status: Inappropriate [OE ptest specific]
>>> +
>>> +Signed-off-by: Kai Kang <kai.k...@windriver.com>
>>> +Signed-off-by: Jackie Huang <jackie.hu...@windriver.com>
>>> +
>>> +diff -Nur freeDiameter-1.2.0.orig/tests/testloadext.c 
>>> freeDiameter-1.2.0/tests/testloadext.c
>>> +--- freeDiameter-1.2.0.orig/tests/testloadext.c    2014-02-19 
>>> 17:33:24.785405032 +0800
>>> ++++ freeDiameter-1.2.0/tests/testloadext.c 2014-02-19 20:08:03.871403924 
>>> +0800
>>> +@@ -49,7 +49,7 @@
>>> + {
>>> +   DIR *dir;
>>> +   struct dirent *dp;
>>> +-  char fullname[512];
>>> ++  char fullname[1024];
>>> +   int pathlen;
>>> + 
>>> +   /* First, initialize the daemon modules */
>>> +@@ -57,11 +57,16 @@
>>> +   CHECK( 0, fd_queues_init()  );
>>> +   CHECK( 0, fd_msg_init()  );
>>> +   CHECK( 0, fd_rtdisp_init()  );
>>> +-  
>>> ++
>>> ++  char *ext_dir = getenv("EXTENSIONS_DIR");
>>> ++  if (ext_dir)
>>> ++          pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
>>> ++  else
>>> ++          pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR 
>>> "/extensions/");
>>> ++
>>> +   /* Find all extensions which have been compiled along the test */
>>> +-  TRACE_DEBUG(INFO, "Loading from: '%s'", BUILD_DIR "/extensions");
>>> +-  CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
>>> +-  pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR 
>>> "/extensions/");
>>> ++  TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
>>> ++  CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
>>> +   
>>> +   while ((dp = readdir (dir)) != NULL) {
>>> +           char * dot = strrchr(dp->d_name, '.');
>>> +diff -Nur freeDiameter-1.2.0.orig/tests/testmesg_stress.c 
>>> freeDiameter-1.2.0/tests/testmesg_stress.c
>>> +--- freeDiameter-1.2.0.orig/tests/testmesg_stress.c        2014-02-19 
>>> 17:33:24.785405032 +0800
>>> ++++ freeDiameter-1.2.0/tests/testmesg_stress.c     2014-02-19 
>>> 20:08:03.928403924 +0800
>>> +@@ -67,15 +67,20 @@
>>> + {
>>> +   DIR *dir;
>>> +   struct dirent *dp;
>>> +-  char fullname[512];
>>> ++  char fullname[1024];
>>> +   int pathlen;
>>> +   struct fd_list all_extensions = FD_LIST_INITIALIZER(all_extensions);
>>> +   struct fd_list ext_with_depends = FD_LIST_INITIALIZER(ext_with_depends);
>>> + 
>>> ++  char *ext_dir = getenv("EXTENSIONS_DIR");
>>> ++  if (ext_dir)
>>> ++          pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
>>> ++  else
>>> ++          pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR 
>>> "/extensions/");
>>> ++
>>> +   /* Find all extensions which have been compiled along the test */
>>> +-  LOG_D("Loading %s*.fdx from: '%s'", BUILD_DIR "/extensions", prefix ?: 
>>> "");
>>> +-  CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
>>> +-  pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR 
>>> "/extensions/");
>>> ++  TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
>>> ++  CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
>>> +   
>>> +   while ((dp = readdir (dir)) != NULL) {
>>> +           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 0000000..d0ca8d9
>>> --- /dev/null
>>> +++ b/meta-networking/recipes-protocols/freediameter/files/run-ptest
>>> @@ -0,0 +1,11 @@
>>> +#!/bin/sh
>>> +
>>> +if ! lsmod | grep -q sctp && ! modprobe sctp 2>/dev/null; then
>>> +        echo "Couldn't load kernel module sctp."
>>> +        echo "Test cases testsctp and testcnx will fail."
>>> +        echo
>>> +fi
>>> +
>>> +export EXTENSIONS_DIR=$EXTENSIONS_DIR
>>> +cmake  -E cmake_echo_color --cyan "Running tests..."
>>> +ctest --force-new-ctest-process
>>> diff --git 
>>> a/meta-networking/recipes-protocols/freediameter/freediameter.inc 
>>> b/meta-networking/recipes-protocols/freediameter/freediameter.inc
>>> new file mode 100644
>>> index 0000000..6880d26
>>> --- /dev/null
>>> +++ b/meta-networking/recipes-protocols/freediameter/freediameter.inc
>>> @@ -0,0 +1,98 @@
>>> +SUMMARY = "An open source implementation of the diameter protocol"
>>> +DESCRIPTION = "\
>>> +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."
>>> +
>>> +HOMEPAGE = "http://www.freediameter.net";
>>> +
>>> +DEPENDS = "flex bison cmake-native libgcrypt gnutls libidn lksctp-tools"
>>> +
>>> +pkgname = "freeDiameter"
>>> +
>>> +SRC_URI = 
>>> "http://www.freediameter.net/hg/${pkgname}/archive/${PV}.tar.gz;downloadfilename=${pkgname}-${PV}.tar.gz
>>>  \
>>> +           
>>> file://Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch \
>>> +           file://freediameter.service \
>>> +           file://freediameter.init \
>>> +           \
>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', \
>>> +           'file://install_test.patch \
>>> +            file://run-ptest \
>>> +            file://pass-ptest-env.patch', '', d)} \
>>> +           "
>>> +
>>> +S = "${WORKDIR}/${pkgname}-${PV}"
>>> +
>>> +PTEST_PATH = "${libdir}/${pkgname}/ptest"
>>> +
>>> +inherit cmake update-rc.d ptest systemd
>>> +
>>> +EXTRA_OECMAKE = " \
>>> +    -DDEFAULT_CONF_PATH:PATH=${sysconfdir}/${pkgname} \
>>> +    -DBUILD_DBG_MONITOR:BOOL=ON  \
>>> +    -DBUILD_TEST_APP:BOOL=ON \
>>> +    -DBUILD_TESTING:BOOL=ON \
>>> +    -DBUILD_APP_RADGW:BOOL=ON \
>>> +    -DBUILD_APP_REDIRECT:BOOL=ON \
>>> +    -DBUILD_TEST_ACCT:BOOL=ON \
>>> +    -DBUILD_TEST_NETEMUL:BOOL=ON \
>>> +    -DBUILD_TEST_RT_ANY:BOOL=ON \
>>> +    -DINSTALL_LIBRARY_SUFFIX:PATH=${baselib} \
>>> +    -DINSTALL_EXTENSIONS_SUFFIX:PATH=${baselib}/${pkgname} \
>>> +    -DINSTALL_TEST_SUFFIX:PATH=${PTEST_PATH}-tests \
>>> +    -DCMAKE_SKIP_RPATH:BOOL=ON \
>>> +"
>>> +# INSTALL_LIBRARY_SUFFIX is relative to CMAKE_INSTALL_PREFIX
>>> +# specify it on cmd line will fix the SET bug in CMakeList.txt
>>> +
>>> +# -DBUILD_APP_ACCT:BOOL=ON This needs POSTGRESQL support
>>> +
>>> +# -DBUILD_APP_DIAMEAP:BOOL=ON  -DBUILD_APP_SIP:BOOL=ON 
>>> -DBUILD_TEST_SIP:BOOL=ON
>>> +# These need MySQL support
>>> +
>>> +# -DBUILD_DBG_INTERACTIVE:BOOL=ON This needs SWIG support
>>> +
>>> +# -DALL_EXTENSIONS=ON will enable all
>>> +
>>> +do_install_append() {
>>> +    # install the sample configuration file
>>> +    install -d -m 0755 ${D}${sysconfdir}/${pkgname}
>>> +    for i in ${S}/doc/*.conf.sample; do
>>> +        install -m 0644 $i ${D}${sysconfdir}/${pkgname}/
>>> +    done
>>> +    mv ${D}${sysconfdir}/${pkgname}/freediameter.conf.sample \
>>> +      ${D}${sysconfdir}/${pkgname}/freeDiameter.conf.sample
>>> +
>>> +    # install daemon init related files
>>> +    install -d -m 0755 ${D}${sysconfdir}/default
>>> +    install -d -m 0755 ${D}${sysconfdir}/init.d
>>> +    install -m 0644 ${S}/contrib/debian/freediameter-daemon.default \
>>> +      ${D}${sysconfdir}/default/${BPN}
>>> +    install -m 0755 ${WORKDIR}/freediameter.init 
>>> ${D}${sysconfdir}/init.d/${BPN}
>>> +
>>> +    # install for systemd
>>> +    install -d ${D}${systemd_system_unitdir}
>>> +    install -m 0644 ${WORKDIR}/freediameter.service 
>>> ${D}${systemd_system_unitdir}
>>> +    sed -i -e 's,@BINDIR@,${bindir},g' 
>>> ${D}${systemd_system_unitdir}/*.service
>>> +}
>>> +
>>> +do_install_ptest() {
>>> +    sed -i "s#\(EXTENSIONS_DIR=\).*\$#\1${libdir}/${pkgname}/#" 
>>> ${D}${PTEST_PATH}/run-ptest
>>> +    mv ${D}${PTEST_PATH}-tests/* ${D}${PTEST_PATH}/
>>> +    rmdir ${D}${PTEST_PATH}-tests
>>> +    install -m 0644 ${B}/tests/CTestTestfile.cmake ${D}${PTEST_PATH}/
>>> +}
>>> +
>>> +FILES_${PN}-dbg += "${libdir}/${pkgname}/.debug/*"
>>> +
>>> +# include the extensions in main package
>>> +FILES_${PN} += "${libdir}/${pkgname}/*"
>>> +
>>> +RDEPENDS_${PN} = "glib-2.0 gnutls libidn"
>>> +RDEPENDS_${PN}-ptest = "cmake"
>>> +
>>> +INITSCRIPT_NAME = "${BPN}"
>>> +INITSCRIPT_PARAMS = "start 30 . stop 70 0 1 2 3 4 5 6 ."
>>> +
>>> +SYSTEMD_SERVICE_${PN} = "freediameter.service"
>>> +SYSTEMD_AUTO_ENABLE = "disable"
>>> 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 0000000..3fb929a
>>> --- /dev/null
>>> +++ b/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
>>> @@ -0,0 +1,7 @@
>>> +include freediameter.inc
>>> +
>>> +LICENSE = "BSD"
>>> +LIC_FILES_CHKSUM = "file://LICENSE;md5=892b2ed6ae815488a08416ff7ee74a35"
>>> +
>>> +SRC_URI[md5sum] = "61b1062aa144b5f12eed514611e6d697"
>>> +SRC_URI[sha256sum] = 
>>> "bd7f105542e9903e776aa006c6931c1f5d3d477cb59af33a9162422efa477097"


-- 
_______________________________________________
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Reply via email to