[oe] [meta-networking][PATCH 2/3] freediameter: add new recipe

Huang, Jie (Jackie) Jackie.Huang at windriver.com
Wed May 17 06:47:19 UTC 2017


Thanks, I will investigate if lksctp-tools can be fixed easily, if not, I will skip the recipe as you suggest.

Thanks,
Jackie

From: Martin Jansa [mailto:martin.jansa at gmail.com]
Sent: Wednesday, May 17, 2017 14:32
To: Huang, Jie (Jackie)
Cc: openembedded-devel at lists.openembedded.org
Subject: Re: [oe] [meta-networking][PATCH 2/3] freediameter: add new recipe

Or you can Skip this recipe when ld-is-gold is used (with comment explaining that it's because of lksctp-tools).

On Wed, May 17, 2017 at 3:06 AM, Huang, Jie (Jackie) <Jackie.Huang at windriver.com<mailto:Jackie.Huang at windriver.com>> wrote:


> -----Original Message-----
> From: Martin Jansa [mailto:martin.jansa at gmail.com<mailto:martin.jansa at gmail.com>]
> Sent: Tuesday, May 16, 2017 22:34
> To: Huang, Jie (Jackie)
> Cc: openembedded-devel at lists.openembedded.org<mailto:openembedded-devel at lists.openembedded.org>
> Subject: Re: [oe] [meta-networking][PATCH 2/3] freediameter: add new recipe
>
> On Fri, May 12, 2017 at 03:09:01PM +0800, jackie.huang at windriver.com<mailto:jackie.huang at windriver.com> wrote:
> > From: Jackie Huang <jackie.huang at windriver.com<mailto:jackie.huang at 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.
>
> lksctp-tools is blacklisted for builds with gold causing:

Sorry I didn't build with gold so I didn't meet the issue, so I need to wait
until lksctp-tools is fixed for builds with gold or I need to fix it myself, right?

Thanks,
Jackie

>
> ERROR: Nothing PROVIDES 'lksctp-tools' (but /home/jenkins/oe/world/shr-
> core/meta-openembedded/meta-networking/recipes-
> protocols/freediameter/freediameter_1.2.1.bb<http://freediameter_1.2.1.bb> DEPENDS on or otherwise
> requires it)
> ERROR: lksctp-tools was skipped: Recipe is blacklisted: BROKEN: fails to link
> against sctp_connectx symbol
> ERROR: Nothing RPROVIDES 'freediameter' (but /home/jenkins/oe/world/shr-
> core/meta-openembedded/meta-networking/recipes-
> protocols/freediameter/freediameter_1.2.1.bb<http://freediameter_1.2.1.bb> RDEPENDS on or otherwise
> requires it)
> ERROR: No eligible RPROVIDERs exist for 'freediameter'
> NOTE: Runtime target 'freediameter' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['freediameter']
> ERROR: Nothing RPROVIDES 'freediameter-dev' (but
> /home/jenkins/oe/world/shr-core/meta-openembedded/meta-
> networking/recipes-protocols/freediameter/freediameter_1.2.1.bb<http://freediameter_1.2.1.bb> RDEPENDS
> on or otherwise requires it)
> ERROR: No eligible RPROVIDERs exist for 'freediameter-dev'
> NOTE: Runtime target 'freediameter-dev' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['freediameter-dev']
>
> >
> > Signed-off-by: Jackie Huang <jackie.huang at windriver.com<mailto:jackie.huang at windriver.com>>
> > ---
> >  ...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<http://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<http://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 000000000..71a5a1ae4
> > --- /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.li at windriver.com<mailto:rongqing.li at 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 000000000..e63a42a7c
> > --- /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 000000000..514481b43
> > --- /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 000000000..151037d69
> > --- /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.zhao at windriver.com<mailto:yao.zhao at windriver.com>>
> > +Signed-off-by: Jackie Huang <jackie.huang at windriver.com<mailto:jackie.huang at 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 000000000..ea857af7d
> > --- /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.kang at windriver.com<mailto:kai.kang at windriver.com>>
> > +Signed-off-by: Jackie Huang <jackie.huang at windriver.com<mailto:jackie.huang at 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 000000000..d0ca8d962
> > --- /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 000000000..6880d26f2
> > --- /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;downloadfi<http://www.freediameter.net/hg/$%7bpkgname%7d/archive/$%7bPV%7d.tar.gz;downloadfi>
> lename=${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, at 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<http://freediameter_1.2.1.bb> b/meta-networking/recipes-
> protocols/freediameter/freediameter_1.2.1.bb<http://freediameter_1.2.1.bb>
> > new file mode 100644
> > index 000000000..3fb929aa0
> > --- /dev/null
> > +++ b/meta-networking/recipes-
> protocols/freediameter/freediameter_1.2.1.bb<http://freediameter_1.2.1.bb>
> > @@ -0,0 +1,7 @@
> > +include freediameter.inc
> > +
> > +LICENSE = "BSD"
> > +LIC_FILES_CHKSUM =
> "file://LICENSE;md5=892b2ed6ae815488a08416ff7ee74a35<file:///\\LICENSE;md5=892b2ed6ae815488a08416ff7ee74a35>"
> > +
> > +SRC_URI[md5sum] = "61b1062aa144b5f12eed514611e6d697"
> > +SRC_URI[sha256sum] =
> "bd7f105542e9903e776aa006c6931c1f5d3d477cb59af33a9162422efa477097"
> > --
> > 2.11.0
> >
> > --
> > _______________________________________________
> > Openembedded-devel mailing list
> > Openembedded-devel at lists.openembedded.org<mailto:Openembedded-devel at lists.openembedded.org>
> > http://lists.openembedded.org/mailman/listinfo/openembedded-devel
>
> --
> Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com<mailto:Martin.Jansa at gmail.com>



More information about the Openembedded-devel mailing list