netgraph TTY

Jerry Toung jtoung at arc.nasa.gov
Wed Mar 30 19:05:33 PST 2005


Hey Max,
all I can say is thank you. That's a very nice tutorial. I am sure other 
people will benefit.
Take care my friend.
Jerry

On Wednesday 30 March 2005 05:22 pm, Maksim Yevmenkin wrote:
> Jerry,
>
> draw a picture :) it really helps :) for example
>
>          right2left     left2right
>                    \   /
> [ksocket] ------- [tee] -------- [hole]
>              left          right
>
> # ngctl
>
> + mkpeer hole hook hook -- create ng_hole node
> + name hook hole -- name ng_hole node
>
>
> + mkpeer hole: tee right right -- create ng_tee node and connect to hole
> + name hole:right tee -- name ng_tee node
>
>
> + mkpeer tee: ksocket left local/stream/0 -- create ksocket node and
> connect to tee
> + name tee:left ksocket -- name ksocket node
> + msg ksocket: bind local/"/tmp/foo" -- bind ksocket
>
>
> + show tee:
>    Name: tee             Type: tee             ID: 00000011   Num hooks: 2
>    Local hook      Peer name       Peer type    Peer ID         Peer
> hook
>    ----------      ---------       ---------    -------
> ---------
>    left            ksocket         ksocket      00000012
> local/stream/0
>    right           hole            hole         00000010        right
>
>
>
> + show ksocket:
>    Name: ksocket         Type: ksocket         ID: 00000012   Num hooks: 1
>    Local hook      Peer name       Peer type    Peer ID         Peer
> hook
>    ----------      ---------       ---------    -------
> ---------
>    local/stream/0  tee             tee          00000011        left
>
>
>
> + show hole:
>    Name: hole            Type: hole            ID: 00000010   Num hooks: 2
>    Local hook      Peer name       Peer type    Peer ID         Peer
> hook
>    ----------      ---------       ---------    -------
> ---------
>    right           tee             tee          00000011        right
>
>    hook            ngctl8529       socket       0000000f        hook
>
>
>
> now connect nghook(8) to "tee:left2right" (or you could connect ng_tty
> node there), then connect to the unix socket at "/tmp/foo" and send
> something to the socket. you should see output. since we have ng_hole on
> the "right" then "right2left" will never get any data. if you need to
> capture traffic from from "right2left" then you will need to connect
> "one2many" node to both "right2left" (to "one2many:many0") and
> "right2left" (to "one2name:many1") and then connect your tty node to the
> "one2many:one" hook
>
> like so
>
> + mkpeer tee: one2many left2right many0
> + connect tee: tee:left2right right2left many1
> + show one2many:
>    Name: one2many        Type: one2many        ID: 00000014   Num hooks: 2
>    Local hook      Peer name       Peer type    Peer ID         Peer
> hook
>    ----------      ---------       ---------    -------
> ---------
>    many1           tee             tee          00000011
> right2left
>    many0           tee             tee          00000011
> left2right
>
>
> + show tee:
>    Name: tee             Type: tee             ID: 00000011   Num hooks: 4
>    Local hook      Peer name       Peer type    Peer ID         Peer
> hook
>    ----------      ---------       ---------    -------
> ---------
>    right2left      one2many        one2many     00000014        many1
>
>    left2right      one2many        one2many     00000014        many0
>
>    left            ksocket         ksocket      00000012
> local/stream/0
>    right           hole            hole         00000010        right
>
>
>
> hope this helps :)
>
> max
>
> Jerry Toung wrote:
> > Good afternoon list,
> > I am still trying to build a simple netgraph using ng_tty. Ultimately I
> > would like to go from inet->tee->ng_tty(/dev/cuaa0).
> >
> > Please advise what I am doing wrong as I still see an error message (see
> > bottom of email). Excuse me for the slighty long thread.
> >
> > Here is my very simple line discipline code:
> >
> >         int d;
> >         int ldisc;
> >         ldisc = NETGRAPHDISC;
> >
> >
> >         if ((d = open("/dev/cuaa0", O_RDWR)) == -1) {
> >                 perror("open");
> >         } else {
> >             printf("descripto # %d\n", d);
> >             if ((ioctl(d, TIOCSETD, &ldisc)) == -1) {
> >                 perror("ioctl");
> >             }
> >         }
> >         printf("Netgraph TTY node initialized successfully\nPress any key
> > to destroy it");
> >         getc(stdin);
> >         close(d);
> >         exit;
> >
> >
> > mrcrab# gcc -g netgraph.c -o test
> > mrcrab# ./test
> > descripto # 3
> > Netgraph TTY node initialized successfully
> > Press any key to destroy it
> >
> > + list
> > There are 2 total nodes:
> >   Name: ngctl27022      Type: socket          ID: 0000000a   Num hooks: 0
> >   Name: tty1            Type: tty             ID: 00000008   Num hooks: 0
> > + mpeer . tee myhook right
> > ngctl: "mpeer": unknown command
> > + mkpeer . tee myhook right
> > + name .:myhook mytee
> > + mkpeer mytee: tty left hook
> > ngctl: send msg: Operation not permitted
> > +
> >
> >
> > _______________________________________________
> > freebsd-hackers at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to
> > "freebsd-hackers-unsubscribe at freebsd.org"



More information about the freebsd-hackers mailing list