#!/bin/sh # NETWORK | KERNEL-LEVEL # # tcp4 remip:port <--- | <--- ks_telnet_out-(inet/stream/tcp)-+ # | | # | (one) # | | # | o2m_telnet # | | # | (many0) # | | # tcp4 *:lport ---> | ----> ks_telnet_in-(inet/stream/tcp)-+ # # ks_telnet_in: ng_ksocket # ks_telnet_out: ng_ksocket # o2m_telnet: ng_one2many name="test" remote="inet/127.0.0.1:5000" local="inet/0.0.0.0:10000" ngctl_batch="/usr/sbin/ngctl -f-" start_script=' mkpeer one2many dummy many1 name .:dummy o2m_%%name%% mkpeer o2m_%%name%%: ksocket one inet/stream/tcp name o2m_%%name%%:one ks_%%name%%_out mkpeer o2m_%%name%%: ksocket many0 inet/stream/tcp name o2m_%%name%%:many0 ks_%%name%%_in msg ks_%%name%%_out: connect %%remote%% msg ks_%%name%%_in: bind %%local%% msg ks_%%name%%_in: listen -1 msg o2m_%%name%%: setconfig { xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 ] } ' stop_script=' shutdown o2m_%%name%%: ' prepare () { sed "s!%%name%%!${name}!g; s!%%local%%!${local}!g; s!%%remote%%!${remote}!g" } start() { prepare <<-EOF | $ngctl_batch $start_script EOF } stop() { prepare <<-EOF | $ngctl_batch $stop_script EOF } [ "$1" = debug ] && ngctl_batch="cat" stop start #stop