[libss7-commits] mattf: trunk r161 - in /trunk: libss7.h mtp2.c mtp2.h ss7.c ss7linktest.c
SVN commits to the libss7 project
libss7-commits at lists.digium.com
Fri May 9 19:59:31 CDT 2008
Author: mattf
Date: Fri May 9 19:59:30 2008
New Revision: 161
URL: http://svn.digium.com/view/libss7?view=rev&rev=161
Log:
Add support for kernel MTP2 support
Modified:
trunk/libss7.h
trunk/mtp2.c
trunk/mtp2.h
trunk/ss7.c
trunk/ss7linktest.c
Modified: trunk/libss7.h
URL: http://svn.digium.com/view/libss7/trunk/libss7.h?view=diff&rev=161&r1=160&r2=161
==============================================================================
--- trunk/libss7.h (original)
+++ trunk/libss7.h Fri May 9 19:59:30 2008
@@ -312,6 +312,8 @@
const char *ss7_get_version(void);
+int ss7_pollflags(struct ss7 *ss7, int fd);
+
/* ISUP call related message functions */
/* Send an IAM */
Modified: trunk/mtp2.c
URL: http://svn.digium.com/view/libss7/trunk/mtp2.c?view=diff&rev=161&r1=160&r2=161
==============================================================================
--- trunk/mtp2.c (original)
+++ trunk/mtp2.c Fri May 9 19:59:30 2008
@@ -217,6 +217,7 @@
{
struct ss7_msg *m;
+ link->flags |= MTP2_FLAG_WRITE;
/* Have to invert the current fib */
link->curfib = !link->curfib;
@@ -291,6 +292,10 @@
add_txbuf(link, m);
}
}
+
+ if (h == buf) { /* We just sent a non MSU */
+ link->flags &= ~MTP2_FLAG_WRITE;
+ }
}
return res;
@@ -300,6 +305,8 @@
{
int len = m->size - MTP2_SIZE;
struct mtp_su_head *h = (struct mtp_su_head *) m->buf;
+
+ link->flags |= MTP2_FLAG_WRITE;
init_mtp2_header(link, h, 1, 0);
@@ -318,12 +325,14 @@
static int mtp2_lssu(struct mtp2 *link, int lssu_status)
{
+ link->flags |= MTP2_FLAG_WRITE;
link->autotxsutype = lssu_status;
return 0;
}
static int mtp2_fisu(struct mtp2 *link, int nack)
{
+ link->flags |= MTP2_FLAG_WRITE;
link->autotxsutype = FISU;
return 0;
}
Modified: trunk/mtp2.h
URL: http://svn.digium.com/view/libss7/trunk/mtp2.h?view=diff&rev=161&r1=160&r2=161
==============================================================================
--- trunk/mtp2.h (original)
+++ trunk/mtp2.h Fri May 9 19:59:30 2008
@@ -90,6 +90,7 @@
unsigned char lastfsnacked:7;
unsigned char curbib:1;
int fd;
+ int flags;
/* Timers */
int t1;
@@ -118,6 +119,10 @@
struct ss7 *master;
};
+/* Flags for the struct mtp2 flags parameter */
+#define MTP2_FLAG_ZAPMTP2 (1 << 0)
+#define MTP2_FLAG_WRITE (1 << 1)
+
/* Initialize MTP link */
int mtp2_start(struct mtp2 *link, int emergency);
int mtp2_stop(struct mtp2 *link);
Modified: trunk/ss7.c
URL: http://svn.digium.com/view/libss7/trunk/ss7.c?view=diff&rev=161&r1=160&r2=161
==============================================================================
--- trunk/ss7.c (original)
+++ trunk/ss7.c Fri May 9 19:59:30 2008
@@ -17,6 +17,9 @@
#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
+#include <zaptel/zaptel.h>
+#include <sys/ioctl.h>
+#include <sys/poll.h>
#include "libss7.h"
#include "ss7_internal.h"
#include "mtp2.h"
@@ -168,7 +171,25 @@
if (ss7->numlinks >= SS7_MAX_LINKS)
return -1;
+ if (transport == SS7_TRANSPORT_TCP) {
+ }
+
if (transport == SS7_TRANSPORT_ZAP) {
+ int zapmtp2 = 0;
+#ifdef ZT_SIG_MTP2
+ struct zt_params z;
+ int res;
+
+ res = ioctl(fd, ZT_GET_PARAMS, &z);
+ if (res)
+ return res;
+
+ if (z.sigtype == ZT_SIG_MTP2) {
+ printf("Found zapmtp2\n");
+ zapmtp2 = 1;
+ }
+
+#endif /* ZT_SIG_MTP2 */
m = mtp2_new(fd, ss7->switchtype);
if (!m)
@@ -177,15 +198,38 @@
m->slc = ss7->numlinks;
ss7->numlinks += 1;
m->master = ss7;
+ if (zapmtp2)
+ m->flags |= MTP2_FLAG_ZAPMTP2;
ss7->links[ss7->numlinks - 1] = m;
}
- if (transport == SS7_TRANSPORT_TCP) {
- /* TODO */
- }
-
- return 0;
+ return 0;
+}
+
+int ss7_pollflags(struct ss7 *ss7, int fd)
+{
+ int i;
+ int winner = -1;
+ int flags = POLLPRI | POLLIN;
+
+ for (i = 0; i < ss7->numlinks; i++) {
+ if (ss7->links[i]->fd == fd) {
+ winner = i;
+ break;
+ }
+ }
+
+ if (winner < 0)
+ return -1;
+
+ if (ss7->links[winner]->flags & MTP2_FLAG_ZAPMTP2) {
+ if (ss7->links[winner]->flags & MTP2_FLAG_WRITE)
+ flags |= POLLOUT;
+ } else
+ flags |= POLLOUT;
+
+ return flags;
}
/* TODO: Add entry to routing table instead */
Modified: trunk/ss7linktest.c
URL: http://svn.digium.com/view/libss7/trunk/ss7linktest.c?view=diff&rev=161&r1=160&r2=161
==============================================================================
--- trunk/ss7linktest.c (original)
+++ trunk/ss7linktest.c Fri May 9 19:59:30 2008
@@ -75,7 +75,7 @@
nextms += tv.tv_usec / 1000;
}
poller.fd = linkset->fd;
- poller.events = POLLIN | POLLOUT | POLLPRI;
+ poller.events = ss7_pollflags(ss7, linkset->fd);
poller.revents = 0;
res = poll(&poller, 1, nextms);
More information about the libss7-commits
mailing list