diff options
author | David Doan <daviddoan@Davids-MacBook-Pro-70.local> | 2023-11-03 14:40:20 -0400 |
---|---|---|
committer | David Doan <daviddoan@Davids-MacBook-Pro-70.local> | 2023-11-03 14:40:20 -0400 |
commit | db7b6b45836052ae23c7c318c36208fe531b91ab (patch) | |
tree | 64bf2835f9bc6d4a810e881de3295462ffb083ea | |
parent | 5d7ffd42b638f33d32c01c46f853e26a5028b552 (diff) |
milestone 1
-rw-r--r-- | pkg/ipstack/ipstack.go | 19 | ||||
-rwxr-xr-x | vhost | bin | 3157834 -> 3158429 bytes | |||
-rwxr-xr-x | vrouter | bin | 3144747 -> 3145110 bytes |
3 files changed, 13 insertions, 6 deletions
diff --git a/pkg/ipstack/ipstack.go b/pkg/ipstack/ipstack.go index 78a6b96..ec87485 100644 --- a/pkg/ipstack/ipstack.go +++ b/pkg/ipstack/ipstack.go @@ -864,7 +864,7 @@ func HandleTestPackets(src *Interface, message []byte, hdr *ipv4header.IPv4Heade func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error { fmt.Println("I see a TCP packet") - // ipHeaderSize := hdr.Len + tcpHeaderAndData := message tcpHdr := iptcp_utils.ParseTCPHeader(tcpHeaderAndData) tcpPayload := tcpHeaderAndData[tcpHdr.DataOffset:] @@ -886,10 +886,12 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error } switch tcpHdr.Flags { - case 0x02: + case header.TCPFlagSyn: fmt.Println("I see a SYN flag") // if the SYN flag is set, then send a SYNACK available := false + + // add to table if available mapMutex.Lock() for _, socketEntry := range VHostSocketMaps { if socketEntry.LocalPort == tcpHdr.DstPort && socketEntry.LocalIP == hdr.Dst.String() && socketEntry.State == Listening{ @@ -902,14 +904,16 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error State: SYNRECIEVED, Socket: socketsMade, } + VHostSocketMaps[socketsMade] = newEntry socketsMade += 1 // add the entry to the map - VHostSocketMaps[socketsMade] = newEntry available = true break } } mapMutex.Unlock() + + // if no socket is available, then drop the packet if !available { fmt.Println("no socket available") return nil @@ -933,7 +937,7 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error fmt.Println(err) } break - case 0x12: + case header.TCPFlagAck | header.TCPFlagSyn: fmt.Println("I see a SYNACK flag") // lookup for socket entry and update its state mapMutex.Lock() @@ -965,7 +969,7 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error fmt.Println(err) } break - case 0x10: + case header.TCPFlagAck: fmt.Println("I see an ACK flag") // lookup for socket entry and update its state // set synChan to true (TODO) @@ -1184,8 +1188,10 @@ type SocketEntry struct { State ConnectionState } -// create a socket map to print the local and remote ip and port as well as the state of the socket +// create a socket map var VHostSocketMaps = make(map[int]*SocketEntry) +// create a channel map +var VHostChannelMaps = make(map[int]chan []byte) var mapMutex = &sync.Mutex{} var socketsMade = 0 var startingSeqNum = rand.Uint32() @@ -1232,6 +1238,7 @@ func (l *VTCPListener) VAccept() (*VTCPConn, error) { Socket: socketEntry.Socket, State: Established, } + mapMutex.Unlock() return conn, nil } } Binary files differBinary files differ |