aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-11-03 14:40:20 -0400
committerDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-11-03 14:40:20 -0400
commitdb7b6b45836052ae23c7c318c36208fe531b91ab (patch)
tree64bf2835f9bc6d4a810e881de3295462ffb083ea
parent5d7ffd42b638f33d32c01c46f853e26a5028b552 (diff)
milestone 1
-rw-r--r--pkg/ipstack/ipstack.go19
-rwxr-xr-xvhostbin3157834 -> 3158429 bytes
-rwxr-xr-xvrouterbin3144747 -> 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
}
}
diff --git a/vhost b/vhost
index 350313e..5919be7 100755
--- a/vhost
+++ b/vhost
Binary files differ
diff --git a/vrouter b/vrouter
index 8597bff..7708666 100755
--- a/vrouter
+++ b/vrouter
Binary files differ