netgraph TTY

Maksim Yevmenkin maksim.yevmenkin at savvis.net
Wed Mar 30 17:23:20 PST 2005


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