summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rhodes <trhodes@FreeBSD.org>2004-09-29 06:22:38 +0000
committerTom Rhodes <trhodes@FreeBSD.org>2004-09-29 06:22:38 +0000
commit24dc798a69ab1b0f198d5af4893a2ccb8f442fc8 (patch)
tree9a96c7f4f5e2024c37ae7ac619b6dbd256f4f966
parente42ab7cde13c06a7f83aeb199965c4262fc608b4 (diff)
downloadsrc-test2-24dc798a69ab1b0f198d5af4893a2ccb8f442fc8.tar.gz
src-test2-24dc798a69ab1b0f198d5af4893a2ccb8f442fc8.zip
Notes
-rw-r--r--contrib/ngatm/sscop/common.c27
-rw-r--r--contrib/ngatm/sscop/common.h10
-rw-r--r--contrib/ngatm/sscop/sscop_main.c45
3 files changed, 80 insertions, 2 deletions
diff --git a/contrib/ngatm/sscop/common.c b/contrib/ngatm/sscop/common.c
index 83af901fe8ec..779986da5514 100644
--- a/contrib/ngatm/sscop/common.c
+++ b/contrib/ngatm/sscop/common.c
@@ -44,7 +44,6 @@
#include <assert.h>
#include <fcntl.h>
#include <err.h>
-#include <isc/eventlib.h>
#include <netnatm/unimsg.h>
#include <netnatm/saal/sscop.h>
@@ -64,7 +63,9 @@ int user_fd;
int loose;
int user_out_fd;
u_int verbose;
+#ifndef USE_LIBBEGEMOT
evContext evctx;
+#endif
evFileID sscop_h;
evFileID user_h;
@@ -153,7 +154,11 @@ proto_msgin(int fd __unused)
if (got == 0) {
eof:
+#ifdef USE_LIBBEGEMOT
+ poll_unregister(sscop_h);
+#else
evDeselectFD(evctx, sscop_h);
+#endif
(void)close(sscop_fd);
sscop_fd = -1;
if (m != NULL)
@@ -212,7 +217,11 @@ user_msgin(int fd __unused)
if (size == 0) {
eof:
+#ifdef USE_LIBBEGEMOT
+ poll_unregister(user_h);
+#else
evDeselectFD(evctx, user_h);
+#endif
if (m != NULL)
uni_msg_destroy(m);
VERBOSE(("EOF on user connection"));
@@ -384,9 +393,14 @@ parse_param(struct sscop_param *param, u_int *pmask, int opt, char *arg)
abort();
}
+#ifdef USE_LIBBEGEMOT
+static void
+tfunc(int tid __unused, void *uap)
+#else
static void
tfunc(evContext ctx __unused, void *uap, struct timespec due __unused,
struct timespec inter __unused)
+#endif
{
struct timer *t = uap;
@@ -402,18 +416,25 @@ sscop_start_timer(struct sscop *sscop, void *arg __unused, u_int msec,
void (*func)(void *))
{
struct timer *t;
+#ifndef USE_LIBBEGEMOT
struct timespec due;
+#endif
if ((t = malloc(sizeof(*t))) == NULL)
err(1, NULL);
t->sscop = sscop;
t->func = func;
+#ifdef USE_LIBBEGEMOT
+ if ((t->id = poll_start_timer(msec, 0, tfunc, t)) == -1)
+ err(1, "cannot start timer");
+#else
due = evAddTime(evNowTime(),
evConsTime((time_t)msec/1000, (long)(msec%1000)*1000));
if (evSetTimer(evctx, tfunc, t, due, evConsTime(0, 0), &t->id))
err(1, "cannot start timer");
+#endif
return (t);
}
@@ -426,6 +447,10 @@ sscop_stop_timer(struct sscop *sscop __unused, void *arg __unused, void *tp)
{
struct timer *t = tp;
+#ifdef USE_LIBBEGEMOT
+ poll_stop_timer(t->id);
+#else
evClearTimer(evctx, t->id);
+#endif
free(t);
}
diff --git a/contrib/ngatm/sscop/common.h b/contrib/ngatm/sscop/common.h
index 96cbb54a8e16..35f54f951ed8 100644
--- a/contrib/ngatm/sscop/common.h
+++ b/contrib/ngatm/sscop/common.h
@@ -33,6 +33,14 @@
#ifndef _SAAL_COMMON_H_
#define _SAAL_COMMON_H_
+#ifdef USE_LIBBEGEMOT
+#include <rpoll.h>
+#define evFileID int
+#define evTimerID int
+#else
+#include <isc/eventlib.h>
+#endif
+
/*
* Writes to a pipe must be in messages (if we don't use framing).
* It is not clear, what is the maximum message size for this. It seems
@@ -49,7 +57,9 @@ extern int user_fd; /* file descriptor for USER */
extern int loose; /* loose messages */
extern int user_out_fd; /* file descriptor for output to user */
extern u_int verbose; /* talk to me */
+#ifndef USE_LIBBEGEMOT
extern evContext evctx;
+#endif
extern evFileID sscop_h;
extern evFileID user_h;
diff --git a/contrib/ngatm/sscop/sscop_main.c b/contrib/ngatm/sscop/sscop_main.c
index 330ca5973d71..59ef55876238 100644
--- a/contrib/ngatm/sscop/sscop_main.c
+++ b/contrib/ngatm/sscop/sscop_main.c
@@ -41,7 +41,6 @@
#include <signal.h>
#include <assert.h>
#include <err.h>
-#include <isc/eventlib.h>
#include <netnatm/unimsg.h>
#include <netnatm/saal/sscop.h>
@@ -95,8 +94,13 @@ static const struct sscop_funcs sscop_funcs = {
* SSCOP file descriptor is ready. Allocate and read one message
* and dispatch a signal.
*/
+#ifdef USE_LIBBEGEMOT
+static void
+proto_infunc(int fd, int mask __unused, void *uap)
+#else
static void
proto_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused)
+#endif
{
struct uni_msg *m;
@@ -107,8 +111,13 @@ proto_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused)
/*
* User input. Allocate and read message and dispatch signal.
*/
+#ifdef USE_LIBBEGEMOT
+static void
+user_infunc(int fd, int mask __unused, void *uap)
+#else
static void
user_infunc(evContext ctx __unused, void *uap, int fd, int mask __unused)
+#endif
{
struct uni_msg *m;
@@ -134,7 +143,9 @@ main(int argc, char *argv[])
struct sigaction sa;
int wait = 0;
u_int mask;
+#ifndef USE_LIBBEGEMOT
evEvent ev;
+#endif
/*
* Default is to have the USER on stdin and SSCOP on stdout
@@ -209,8 +220,10 @@ main(int argc, char *argv[])
if(user_out_fd < 0)
user_out_fd = user_fd;
+#ifndef USE_LIBBEGEMOT
if (evCreate(&evctx))
err(1, "evCreate");
+#endif
/*
* Catch USR1
@@ -233,8 +246,14 @@ main(int argc, char *argv[])
/*
* Register sscop fd
*/
+#ifdef USE_LIBBEGEMOT
+ if ((sscop_h = poll_register(sscop_fd, proto_infunc,
+ sscop, POLL_IN)) == -1)
+ err(1, "can't select on sscop fd");
+#else
if (evSelectFD(evctx, sscop_fd, EV_READ, proto_infunc, sscop, &sscop_h))
err(1, "can't select on sscop fd");
+#endif
/*
* if we are active - send establish request
@@ -246,11 +265,15 @@ main(int argc, char *argv[])
* Run protocol until it get's ready
*/
while (sscop_fd >= 0 && !ready) {
+#ifdef USE_LIBBEGEMOT
+ poll_dispatch(1);
+#else
if (evGetNext(evctx, &ev, EV_WAIT) == 0) {
if (evDispatch(evctx, ev))
err(1, "dispatch event");
} else if (errno != EINTR)
err(1, "get event");
+#endif
}
/*
@@ -265,15 +288,23 @@ main(int argc, char *argv[])
VERBOSE(("READY - starting data transfer"));
if (!unidir &&
+#ifdef USE_LIBBEGEMOT
+ ((user_h = poll_register(user_fd, user_infunc, sscop, POLL_IN)) == -1))
+#else
evSelectFD(evctx, user_fd, EV_READ, user_infunc, sscop, &user_h))
+#endif
err(1, "can't select on sscop fd");
while (!sigusr1 && sscop_fd >= 0) {
+#ifdef USE_LIBBEGEMOT
+ poll_dispatch(1);
+#else
if (evGetNext(evctx, &ev, EV_WAIT) == 0) {
if (evDispatch(evctx, ev))
err(1, "dispatch event");
} else if (errno != EINTR)
err(1, "get event");
+#endif
}
if (sigusr1 && sscop_fd >= 0) {
@@ -282,11 +313,15 @@ main(int argc, char *argv[])
*/
sscop_aasig(sscop, SSCOP_RELEASE_request, NULL, 0);
while (!finished && sscop_fd >= 0) {
+#ifdef USE_LIBBEGEMOT
+ poll_dispatch(1);
+#else
if (evGetNext(evctx, &ev, EV_WAIT) == 0) {
if (evDispatch(evctx, ev))
err(1, "dispatch event");
} else if (errno != EINTR)
err(1, "get event");
+#endif
}
}
@@ -333,7 +368,11 @@ sscop_send_upper(struct sscop *sscop, void *arg __unused, enum sscop_aasig sig,
case SSCOP_RELEASE_indication:
if (end_at_eof) {
VERBOSE((" ... exiting"));
+#ifdef USE_LIBBEGEMOT
+ poll_unregister(sscop_h);
+#else
evDeselectFD(evctx, sscop_h);
+#endif
(void)close(sscop_fd);
sscop_fd = -1;
}
@@ -345,7 +384,11 @@ sscop_send_upper(struct sscop *sscop, void *arg __unused, enum sscop_aasig sig,
case SSCOP_RELEASE_confirm:
if (end_at_eof) {
VERBOSE((" ... exiting"));
+#ifdef USE_LIBBEGEMOT
+ poll_unregister(sscop_h);
+#else
evDeselectFD(evctx, sscop_h);
+#endif
(void)close(sscop_fd);
sscop_fd = -1;
}