summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1999-10-23 04:28:11 +0000
committerjulian <julian@FreeBSD.org>1999-10-23 04:28:11 +0000
commitbd6712748945561c31293c9a9bbafee61470548b (patch)
treeda0a6d48db55b43982988a91a3e4b738558ea7c8
parent309540210a9e865a6d20be7df5e9de244a48b047 (diff)
downloadFreeBSD-src-bd6712748945561c31293c9a9bbafee61470548b.zip
FreeBSD-src-bd6712748945561c31293c9a9bbafee61470548b.tar.gz
Now that Netgraph is in the system there are some cleanups we can do.
Also save a slightly closer to completion version of the PPPOE code. Submitted by: Archie Cobbs <archie@freebsd.org>
-rw-r--r--share/man/man4/ng_tty.418
-rw-r--r--share/man/man4/ng_vjc.42
-rw-r--r--share/man/man4/tty.47
-rw-r--r--sys/conf/NOTES1
-rw-r--r--sys/conf/files2
-rw-r--r--sys/i386/conf/LINT1
-rw-r--r--sys/i386/conf/NOTES1
-rw-r--r--sys/kern/tty_conf.c11
-rw-r--r--sys/modules/netgraph/tty/ng_tty.418
-rw-r--r--sys/modules/netgraph/tty/ng_tty.818
-rw-r--r--sys/modules/netgraph/vjc/ng_vjc.42
-rw-r--r--sys/modules/netgraph/vjc/ng_vjc.82
-rw-r--r--sys/netgraph/ng_pppoe.c27
-rw-r--r--sys/netgraph/ng_pppoe.h4
-rw-r--r--sys/netgraph/ng_tty.c10
-rw-r--r--sys/sys/ttycom.h1
16 files changed, 63 insertions, 62 deletions
diff --git a/share/man/man4/ng_tty.4 b/share/man/man4/ng_tty.4
index 660b46c..5314116 100644
--- a/share/man/man4/ng_tty.4
+++ b/share/man/man4/ng_tty.4
@@ -42,14 +42,16 @@
.Nm ng_tty
.Nd netgraph node type that is also a line discipline
.Sh SYNOPSIS
+.Fd #include <sys/ttycom.h>
.Fd #include <netgraph/ng_message.h>
.Fd #include <netgraph/ng_tty.h>
.Sh DESCRIPTION
The
.Nm tty
node type is both a netgraph node type and a line discipline.
-A new node is created when the corresponding line discipline is
-registered on a tty device (see
+A new node is created when the corresponding line discipline,
+.Dv NETGRAPHDISC ,
+is registered on a tty device (see
.Xr tty 4 ")."
.Pp
The node has a single hook called
@@ -112,18 +114,6 @@ The
control message is not valid, and always returns the error
.Er EOPNOTSUPP .
.Sh BUGS
-The
-.Nm tty
-type registers its line discipline when the type is installed,
-where it is dynamically assigned an integer index.
-Unfortunately, there's no way to know what this integer is
-except by reading the output of
-.Xr dmesg 8 .
-The fix for this is to have line disciplines identified by
-unique ASCII strings instead of fixed integer constants,
-or else to assign one of those constants to
-.Nm ng_tty .
-.Pp
The serial driver code also has a notion of a ``hot character.''
Unfortunately, this value is statically defined in terms of the
line discipline and cannot be changed.
diff --git a/share/man/man4/ng_vjc.4 b/share/man/man4/ng_vjc.4
index bc0a8b1..fc37bf8 100644
--- a/share/man/man4/ng_vjc.4
+++ b/share/man/man4/ng_vjc.4
@@ -158,7 +158,7 @@ This node shuts down upon receipt of a
.Dv NGM_SHUTDOWN
control message, or when all hooks have been disconnected.
.Sh BUGS
-This node type requires that the file
+When used as a loadable kernel module, this node type requires that the file
.Dv "net/slcompress.c"
was compiled into the kernel. Currently the only way to insure this
is to include the
diff --git a/share/man/man4/tty.4 b/share/man/man4/tty.4
index 367033c..6b763f3 100644
--- a/share/man/man4/tty.4
+++ b/share/man/man4/tty.4
@@ -165,7 +165,7 @@ The available line disciplines are listed in
.Pa Aq sys/ttycom.h
and currently are:
.Pp
-.Bl -tag -width TIOCGWINSZ -compact
+.Bl -tag -width NETGRAPHDISC -compact
.It TTYDISC
Termios interactive line discipline.
.It TABLDISC
@@ -174,6 +174,10 @@ Tablet line discipline.
Serial IP line discipline.
.It PPPDISC
PPP line discipline.
+.It NETGRAPHDISC
+Netgraph
+.Xr ng_tty 8
+line discipline.
.El
.Pp
.It Dv TIOCGETD Fa int *ldisc
@@ -394,4 +398,5 @@ is cleared in the terminal.
.Xr ioctl 2 ,
.Xr pty 4 ,
.Xr termios 4 ,
+.Xr ng_tty 8 ,
.Xr getty 8
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index ddfb574..4b0c075 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -404,6 +404,7 @@ options NETGRAPH_RFC1490
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
+options NETGRAPH_VJC
#
# Network interfaces:
diff --git a/sys/conf/files b/sys/conf/files
index 23e5ded..19cdb43 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -576,6 +576,8 @@ netgraph/ng_socket.c optional netgraph_socket
netgraph/ng_tee.c optional netgraph_tee
netgraph/ng_tty.c optional netgraph_tty
netgraph/ng_UI.c optional netgraph_UI
+netgraph/ng_vjc.c optional netgraph_vjc
+net/slcompress.c optional netgraph_vjc
netinet/if_atm.c optional atm
netinet/if_ether.c optional ether
netinet/igmp.c optional inet
diff --git a/sys/i386/conf/LINT b/sys/i386/conf/LINT
index ddfb574..4b0c075 100644
--- a/sys/i386/conf/LINT
+++ b/sys/i386/conf/LINT
@@ -404,6 +404,7 @@ options NETGRAPH_RFC1490
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
+options NETGRAPH_VJC
#
# Network interfaces:
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index ddfb574..4b0c075 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -404,6 +404,7 @@ options NETGRAPH_RFC1490
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
+options NETGRAPH_VJC
#
# Network interfaces:
diff --git a/sys/kern/tty_conf.c b/sys/kern/tty_conf.c
index 43c73be..1d41f29 100644
--- a/sys/kern/tty_conf.c
+++ b/sys/kern/tty_conf.c
@@ -47,7 +47,7 @@
#include <sys/conf.h>
#ifndef MAXLDISC
-#define MAXLDISC 8
+#define MAXLDISC 9
#endif
static l_open_t l_noopen;
@@ -82,15 +82,16 @@ struct linesw linesw[MAXLDISC] =
NODISC(3), /* TABLDISC */
NODISC(4), /* SLIPDISC */
NODISC(5), /* PPPDISC */
- NODISC(6), /* loadable */
+ NODISC(6), /* NETGRAPHDISC */
NODISC(7), /* loadable */
+ NODISC(8), /* loadable */
};
int nlinesw = sizeof (linesw) / sizeof (linesw[0]);
static struct linesw nodisc = NODISC(0);
-#define LOADABLE_LDISC 6
+#define LOADABLE_LDISC 7
/*
* ldisc_register: Register a line discipline.
*
@@ -125,7 +126,7 @@ ldisc_register(discipline, linesw_p)
/*
* ldisc_deregister: Deregister a line discipline obtained with
- * ldisc_register. Can only deregister "loadable" ones now.
+ * ldisc_register.
*
* discipline: Index for discipline to unload.
*/
@@ -133,7 +134,7 @@ void
ldisc_deregister(discipline)
int discipline;
{
- if (discipline >= LOADABLE_LDISC && discipline < MAXLDISC) {
+ if (discipline < MAXLDISC) {
linesw[discipline] = nodisc;
}
}
diff --git a/sys/modules/netgraph/tty/ng_tty.4 b/sys/modules/netgraph/tty/ng_tty.4
index 660b46c..5314116 100644
--- a/sys/modules/netgraph/tty/ng_tty.4
+++ b/sys/modules/netgraph/tty/ng_tty.4
@@ -42,14 +42,16 @@
.Nm ng_tty
.Nd netgraph node type that is also a line discipline
.Sh SYNOPSIS
+.Fd #include <sys/ttycom.h>
.Fd #include <netgraph/ng_message.h>
.Fd #include <netgraph/ng_tty.h>
.Sh DESCRIPTION
The
.Nm tty
node type is both a netgraph node type and a line discipline.
-A new node is created when the corresponding line discipline is
-registered on a tty device (see
+A new node is created when the corresponding line discipline,
+.Dv NETGRAPHDISC ,
+is registered on a tty device (see
.Xr tty 4 ")."
.Pp
The node has a single hook called
@@ -112,18 +114,6 @@ The
control message is not valid, and always returns the error
.Er EOPNOTSUPP .
.Sh BUGS
-The
-.Nm tty
-type registers its line discipline when the type is installed,
-where it is dynamically assigned an integer index.
-Unfortunately, there's no way to know what this integer is
-except by reading the output of
-.Xr dmesg 8 .
-The fix for this is to have line disciplines identified by
-unique ASCII strings instead of fixed integer constants,
-or else to assign one of those constants to
-.Nm ng_tty .
-.Pp
The serial driver code also has a notion of a ``hot character.''
Unfortunately, this value is statically defined in terms of the
line discipline and cannot be changed.
diff --git a/sys/modules/netgraph/tty/ng_tty.8 b/sys/modules/netgraph/tty/ng_tty.8
index 660b46c..5314116 100644
--- a/sys/modules/netgraph/tty/ng_tty.8
+++ b/sys/modules/netgraph/tty/ng_tty.8
@@ -42,14 +42,16 @@
.Nm ng_tty
.Nd netgraph node type that is also a line discipline
.Sh SYNOPSIS
+.Fd #include <sys/ttycom.h>
.Fd #include <netgraph/ng_message.h>
.Fd #include <netgraph/ng_tty.h>
.Sh DESCRIPTION
The
.Nm tty
node type is both a netgraph node type and a line discipline.
-A new node is created when the corresponding line discipline is
-registered on a tty device (see
+A new node is created when the corresponding line discipline,
+.Dv NETGRAPHDISC ,
+is registered on a tty device (see
.Xr tty 4 ")."
.Pp
The node has a single hook called
@@ -112,18 +114,6 @@ The
control message is not valid, and always returns the error
.Er EOPNOTSUPP .
.Sh BUGS
-The
-.Nm tty
-type registers its line discipline when the type is installed,
-where it is dynamically assigned an integer index.
-Unfortunately, there's no way to know what this integer is
-except by reading the output of
-.Xr dmesg 8 .
-The fix for this is to have line disciplines identified by
-unique ASCII strings instead of fixed integer constants,
-or else to assign one of those constants to
-.Nm ng_tty .
-.Pp
The serial driver code also has a notion of a ``hot character.''
Unfortunately, this value is statically defined in terms of the
line discipline and cannot be changed.
diff --git a/sys/modules/netgraph/vjc/ng_vjc.4 b/sys/modules/netgraph/vjc/ng_vjc.4
index bc0a8b1..fc37bf8 100644
--- a/sys/modules/netgraph/vjc/ng_vjc.4
+++ b/sys/modules/netgraph/vjc/ng_vjc.4
@@ -158,7 +158,7 @@ This node shuts down upon receipt of a
.Dv NGM_SHUTDOWN
control message, or when all hooks have been disconnected.
.Sh BUGS
-This node type requires that the file
+When used as a loadable kernel module, this node type requires that the file
.Dv "net/slcompress.c"
was compiled into the kernel. Currently the only way to insure this
is to include the
diff --git a/sys/modules/netgraph/vjc/ng_vjc.8 b/sys/modules/netgraph/vjc/ng_vjc.8
index bc0a8b1..fc37bf8 100644
--- a/sys/modules/netgraph/vjc/ng_vjc.8
+++ b/sys/modules/netgraph/vjc/ng_vjc.8
@@ -158,7 +158,7 @@ This node shuts down upon receipt of a
.Dv NGM_SHUTDOWN
control message, or when all hooks have been disconnected.
.Sh BUGS
-This node type requires that the file
+When used as a loadable kernel module, this node type requires that the file
.Dv "net/slcompress.c"
was compiled into the kernel. Currently the only way to insure this
is to include the
diff --git a/sys/netgraph/ng_pppoe.c b/sys/netgraph/ng_pppoe.c
index b59dbb3..77142bb 100644
--- a/sys/netgraph/ng_pppoe.c
+++ b/sys/netgraph/ng_pppoe.c
@@ -174,6 +174,7 @@ static void pppoe_start(sessp sp);
static void sendpacket(sessp sp);
static void pppoe_ticker(void *arg);
static struct pppoe_tag* scan_tags(sessp sp, struct pppoe_hdr* ph);
+static int pppoe_send_event(sessp sp, enum cmd cmdid);
/*************************************************************************
* Some basic utilities from the Linux version with author's permission.*
@@ -923,6 +924,7 @@ ng_PPPoE_rcvdata(hook_p hook, struct mbuf *m, meta_p meta)
make_packet(sp);
sp->state = PPPOE_NEWCONNECTED;
sendpacket(sp);
+ pppoe_send_event(sp, NGM_PPPOE_SUCCESS);
/*
* Having sent the last Negotiation header,
* Set up the stored packet header to
@@ -936,6 +938,7 @@ ng_PPPoE_rcvdata(hook_p hook, struct mbuf *m, meta_p meta)
sp->pkt_hdr.eh.ether_type
= ETHERTYPE_PPPOE_SESS;
sp->pkt_hdr.ph.code = 0;
+ pppoe_send_event(sp, NGM_PPPOE_SUCCESS);
break;
case PADS_CODE:
/*
@@ -986,6 +989,7 @@ ng_PPPoE_rcvdata(hook_p hook, struct mbuf *m, meta_p meta)
m_freem(neg->m);
FREE(sp->neg, M_NETGRAPH);
sp->neg = NULL;
+ pppoe_send_event(sp, NGM_PPPOE_SUCCESS);
break;
case PADT_CODE:
/*
@@ -1002,7 +1006,9 @@ ng_PPPoE_rcvdata(hook_p hook, struct mbuf *m, meta_p meta)
}
/* send message to creator */
/* close hook */
- ng_destroy_hook(sendhook);
+ if (sendhook) {
+ ng_destroy_hook(sendhook);
+ }
break;
default:
LEAVE(EPFNOSUPPORT);
@@ -1189,6 +1195,9 @@ ng_PPPoE_disconnect(hook_p hook)
privp->ethernet_hook = NULL;
} else {
sp = hook->private;
+ if (sp->state != PPPOE_SNONE ) {
+ pppoe_send_event(sp, NGM_PPPOE_CLOSE);
+ }
untimeout(pppoe_ticker, hook, sp->neg->timeout_handle);
FREE(sp, M_NETGRAPH);
}
@@ -1228,6 +1237,7 @@ pppoe_ticker(void *arg)
if ((neg->timeout <<= 1) > PPPOE_TIMEOUT_LIMIT) {
if (sp->state == PPPOE_SREQ) {
/* revert to SINIT mode */
+ pppoe_start(sp);
} else {
neg->timeout = PPPOE_TIMEOUT_LIMIT;
}
@@ -1236,7 +1246,6 @@ pppoe_ticker(void *arg)
case PPPOE_PRIMED:
case PPPOE_SOFFER:
/* a timeout on these says "give up" */
- /* XXX should notify creator */
ng_destroy_hook(hook);
break;
default:
@@ -1341,3 +1350,17 @@ scan_tags(sessp sp, struct pppoe_hdr* ph)
return NULL;
}
+static int
+pppoe_send_event(sessp sp, enum cmd cmdid)
+{
+ int error;
+ struct ng_mesg *msg;
+ struct ngPPPoE_sts *sts;
+
+ NG_MKMESSAGE(msg, NGM_PPPOE_COOKIE, cmdid,
+ sizeof(struct ngPPPoE_sts), M_NOWAIT);
+ sts = (struct ngPPPoE_sts *)msg->data;
+ strncpy(sts->hook, sp->hook->name, NG_HOOKLEN + 1);
+ error = ng_send_msg(sp->hook->node, msg, sp->creator, NULL);
+ return (error);
+}
diff --git a/sys/netgraph/ng_pppoe.h b/sys/netgraph/ng_pppoe.h
index 5ee3e7d..6e71f6f 100644
--- a/sys/netgraph/ng_pppoe.h
+++ b/sys/netgraph/ng_pppoe.h
@@ -66,7 +66,7 @@
* Netgraph commands understood by this node type.
* FAIL, SUCCESS and CLOSE are sent by the node rather than received.
********************************************************************/
-enum {
+enum cmd {
NGM_PPPOE_SET_FLAG = 1,
NGM_PPPOE_CONNECT = 2, /* Client, Try find this service */
NGM_PPPOE_LISTEN = 3, /* Server, Await a request for this service */
@@ -115,7 +115,7 @@ struct ngPPPoE_init_data {
* (to report which hook has failed or connected). The message is sent
* to whoever requested the connection. (close may use this too).
*/
-struct ngPPPoE_req {
+struct ngPPPoE_sts {
char hook[NG_HOOKLEN + 1]; /* hook associated with event session */
};
diff --git a/sys/netgraph/ng_tty.c b/sys/netgraph/ng_tty.c
index 4ec7bf9..568aae7 100644
--- a/sys/netgraph/ng_tty.c
+++ b/sys/netgraph/ng_tty.c
@@ -69,6 +69,7 @@
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/tty.h>
+#include <sys/ttycom.h>
#include <sys/syslog.h>
#include <sys/errno.h>
#include <sys/ioccom.h>
@@ -158,7 +159,6 @@ static struct linesw ngt_disc = {
ttymodem,
NG_TTY_DFL_HOTCHAR /* XXX can't change this in serial driver */
};
-static int ngt_ldisc = -1;
/* Netgraph node type descriptor */
static struct ng_type typestruct = {
@@ -203,7 +203,7 @@ ngt_open(dev_t dev, struct tty *tp)
(void) spltty(); /* XXX is this necessary? */
/* Already installed? */
- if (tp->t_line == ngt_ldisc) {
+ if (tp->t_line == NETGRAPHDISC) {
sc = (sc_p) tp->t_sc;
if (sc != NULL && sc->tp == tp)
goto done;
@@ -676,17 +676,13 @@ ngt_mod_event(module_t mod, int event, void *data)
/* Register line discipline */
s = spltty();
- if ((ngt_ldisc = ldisc_register(LDISC_LOAD, &ngt_disc)) < 0) {
+ if ((ngt_ldisc = ldisc_register(NETGRAPHDISC, &ngt_disc)) < 0) {
splx(s);
log(LOG_ERR, "%s: can't register line discipline",
__FUNCTION__);
return (EIO);
}
splx(s);
-
- /* OK */
- log(LOG_INFO, "line discipline #%d registered to"
- " netgraph node type \"%s\"\n", ngt_ldisc, type->name);
break;
case MOD_UNLOAD:
diff --git a/sys/sys/ttycom.h b/sys/sys/ttycom.h
index ac6c45a..502b4e7 100644
--- a/sys/sys/ttycom.h
+++ b/sys/sys/ttycom.h
@@ -135,5 +135,6 @@ struct winsize {
#define TABLDISC 3 /* tablet discipline */
#define SLIPDISC 4 /* serial IP discipline */
#define PPPDISC 5 /* PPP discipline */
+#define NETGRAPHDISC 6 /* Netgraph tty node discipline */
#endif /* !_SYS_TTYCOM_H_ */
OpenPOWER on IntegriCloud