소스 검색

Merge "multi-telnet first stab"

Aki Nyrhinen 9 년 전
부모
커밋
2dcec4cc16
2개의 변경된 파일105개의 추가작업 그리고 37개의 파일을 삭제
  1. 42 0
      util/GO9PRUN8
  2. 63 37
      util/telnet.go

+ 42 - 0
util/GO9PRUN8

@@ -0,0 +1,42 @@
+
+
+$HARVEY/util/ufs -root=$HARVEY &
+pids="$!"
+
+for port in `seq 5550 5557`; do
+	sudo qemu-system-x86_64 -cpu Opteron_G1 -smp 1 -m 1024  \
+		-enable-kvm \
+		--machine pc \
+		-net nic,model=rtl8139 \
+		-net user,hostfwd=tcp::"$port"-:1522 \
+		-kernel 9k8cpu.32bit $* </dev/null &
+	pids="$! $pids"
+done
+
+echo $pids
+
+die() {
+	sudo kill $pids
+}
+
+trap die 2
+wait
+
+# -nographic \
+#-S -gdb tcp::1234 \
+# -nographic \
+#-kernel mnt/hdd/kernel $*
+
+# if you need the dump.
+#-net dump,file=/tmp/vm0.pcap \
+
+#sudo qemu-system-x86_64 -s -cpu phenom -smp 8 -m 4096 -nographic  \
+#-net nic,model=rtl8139 mnt/hdd268mb.img \
+#-net user,hostfwd=tcp::5555-:23 \
+#-net dump,file=/tmp/vm0.pcap \
+#-kernel mnt/hdd/kernel $*
+#
+#sudo qemu-system-x86_64 -s -cpu phenom -smp 8 -m 6024 -nographic  -net nic,model=rtl8139 mnt/hdd268mb.img -netdev user,id=mynet0 -kernel mnt/hdd/kernel $*
+#sudo qemu-system-x86_64 -s -cpu phenom -smp 8 -m 6024 -nographic  -net nic,model=rtl8139 mnt/hdd268mb.img -netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9 -kernel mnt/hdd/kernel $*
+
+# 

+ 63 - 37
util/telnet.go

@@ -166,25 +166,30 @@ Wget reads one file from the argument and writes it on the standard output.
 */
 func main() {
 	a := os.Args
+
 	if len(a) < 2 {
 		os.Exit(1)
 	}
 
-	port := "1522"
-	if !strings.Contains(a[1], ":") {
-		a[1] = a[1] + ":" + port
-	}
+	var tcpc []*net.TCPConn
+	for _, a := range os.Args[1:] {
+		port := "1522"
+		if !strings.Contains(a, ":") {
+			a = a + ":" + port
+		}
 
-	tcpdst, err := net.ResolveTCPAddr("tcp", a[1])
-	if err != nil {
-		fmt.Printf("%v\n", err)
-		os.Exit(1)
-	}
+		tcpdst, err := net.ResolveTCPAddr("tcp", a)
+		if err != nil {
+			fmt.Printf("%v\n", err)
+			os.Exit(1)
+		}
 
-	c, err := net.DialTCP("tcp", nil, tcpdst)
-	if err != nil {
-		fmt.Printf("%v\n", err)
-		os.Exit(1)
+		c, err := net.DialTCP("tcp", nil, tcpdst)
+		if err != nil {
+			fmt.Printf("%v\n", err)
+			os.Exit(1)
+		}
+		tcpc = append(tcpc, c)
 	}
 
 	raw()
@@ -200,14 +205,16 @@ func main() {
 	}()
 
 	go func() {
-		b := make([]byte, 512)
+		b := make([]byte, 1024)
 		for {
 			n, err := os.Stdin.Read(b)
 			if err != nil {
 				if err != io.EOF {
 					fmt.Printf("%v\n", err)
 				}
-				c.CloseWrite() // I know, I know.. but it is handy sometimes.
+				for _, c := range tcpc {
+					c.CloseWrite() // I know, I know.. but it is handy sometimes.
+				}
 				break
 			}
 			for i := range b[:n] {
@@ -217,36 +224,55 @@ func main() {
 					fmt.Printf("\n")
 				}
 			}
-			if _, err := c.Write(b[:n]); err != nil {
-				fmt.Printf("%v\n", err)
-				break
+
+			for _, c := range tcpc {
+				if _, err := c.Write(b[:n]); err != nil {
+					fmt.Printf("%v\n", err)
+					break
+				}
 			}
+
 		}
 	}()
 
-	func() {
-		b := make([]byte, 512)
-		for {
-			n, err := c.Read(b)
-			if err != nil {
-				if err != io.EOF {
-					fmt.Printf("%v\n", err)
+	xchan := make(chan int)
+	outchan := make(chan string)
+	for i, c := range tcpc {
+		go func(i int, c *net.TCPConn) {
+
+			b := make([]byte, 256)
+			var out []byte
+			for {
+				n, err := c.Read(b)
+				if err != nil {
+					if err != io.EOF {
+						fmt.Printf("%v\n", err)
+					}
+					c.Close()
+					xchan <- 1
+					break
 				}
-				c.Close()
-				break
-			}
-			if n == 0 {
-				continue
-			}
-			out := []byte{}
-			for _, v := range b[:n] {
-				out = append(out, v)
-				if v == '\n' {
-					out = append(out, '\r')
+				if n == 0 {
+					continue
+				}
+				for _, v := range b[:n] {
+					out = append(out, v)
+					if v == '\n' {
+						outchan <- fmt.Sprintf("[%d]:%s\r", i, out)
+						out = nil
+					}
 				}
 			}
-			fmt.Printf("%s", string(out))
+		}(i, c)
+	}
+	go func() {
+		for {
+			line := <-outchan
+			fmt.Printf("%s", line)
 		}
 	}()
 
+	for _ = range tcpc {
+		<-xchan
+	}
 }