aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-11-09 12:19:38 -0500
committerDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-11-09 12:19:38 -0500
commit641862e3d1cf499b4265c90241f897f62645718a (patch)
tree384c3c6a37751dee8ad6590e0598cfad94f87e9a
parenta787b00605d8f89e0978eb9956b516296c85d0e3 (diff)
sending changes
-rw-r--r--pkg/ipstack/ipstack.go78
-rwxr-xr-xvhostbin3191006 -> 3179481 bytes
-rwxr-xr-xvrouterbin3182993 -> 3146532 bytes
3 files changed, 43 insertions, 35 deletions
diff --git a/pkg/ipstack/ipstack.go b/pkg/ipstack/ipstack.go
index 9ffe34f..afe3bc5 100644
--- a/pkg/ipstack/ipstack.go
+++ b/pkg/ipstack/ipstack.go
@@ -891,37 +891,6 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error
// if the SYN flag is set, then send a SYNACK
available := false
- socketEntry, in := VHostSocketMaps[SocketKey{hdr.Dst.String(), tcpHdr.DstPort, hdr.Src.String(), tcpHdr.SrcPort}]
- if !in {
- fmt.Println("no socket entry found")
- } else if socketEntry.State == Established {
- fmt.Println("socket entry found")
-
- // make ack header
- tcpHdr := &header.TCPFields{
- SrcPort: tcpHdr.DstPort,
- DstPort: tcpHdr.SrcPort,
- SeqNum: tcpHdr.SeqNum,
- AckNum: tcpHdr.SeqNum + 1,
- DataOffset: 20,
- Flags: 0x10,
- WindowSize: MAX_WINDOW_SIZE,
- Checksum: 0,
- UrgentPointer: 0,
- }
- // make the payload
- err := SendTCP(tcpHdr, message, hdr.Dst, hdr.Src)
- if err != nil {
- fmt.Println(err)
- }
- ptr := socketEntry.Conn.RecvBuffer.recvNext
- l := uint32(len(tcpPayload))
- copy(socketEntry.Conn.RecvBuffer.buffer[ptr:ptr+l], tcpPayload)
- socketEntry.Conn.RecvBuffer.recvNext += l
- fmt.Println("recvNext: ", socketEntry.Conn.RecvBuffer.recvNext)
- fmt.Println("recvBuffer: ", socketEntry.Conn.RecvBuffer.buffer)
- break
- }
// add to table if available
mapMutex.Lock()
for _, socketEntry := range VHostSocketMaps {
@@ -1007,17 +976,56 @@ func HandleTCP(src *Interface, message []byte, hdr *ipv4header.IPv4Header) error
fmt.Println("I see an ACK flag")
// lookup for socket entry and update its state
// set synChan to true (TODO)
- key := SocketKey{hdr.Dst.String(), tcpHdr.DstPort, hdr.Src.String(), tcpHdr.SrcPort}
- socketEntry, in := VHostSocketMaps[key]
+ // key := SocketKey{hdr.Dst.String(), tcpHdr.DstPort, hdr.Src.String(), tcpHdr.SrcPort}
+ // socketEntry, in := VHostSocketMaps[key]
+ // if !in {
+ // fmt.Println("no socket entry found")
+ // } else if socketEntry.State == Established {
+ // fmt.Println("socket entry found")
+ // // socketEntry.Conn.RecvBuffer.buffer = append(socketEntry.Conn.RecvBuffer.buffer, tcpPayload...)
+ // socketEntry.Conn.SendBuffer.una += uint32(len(tcpPayload))
+ // break
+ // }
+ socketEntry, in := VHostSocketMaps[SocketKey{hdr.Dst.String(), tcpHdr.DstPort, hdr.Src.String(), tcpHdr.SrcPort}]
if !in {
fmt.Println("no socket entry found")
} else if socketEntry.State == Established {
+ if (len(tcpPayload) == 0) {
+ break
+ }
fmt.Println("socket entry found")
- // socketEntry.Conn.RecvBuffer.buffer = append(socketEntry.Conn.RecvBuffer.buffer, tcpPayload...)
+ // infinite loop is created here
+ // make ack header
+ tcpHdr := &header.TCPFields{
+ SrcPort: tcpHdr.DstPort,
+ DstPort: tcpHdr.SrcPort,
+ SeqNum: tcpHdr.AckNum,
+ AckNum: tcpHdr.SeqNum + uint32(len(tcpPayload)),
+ DataOffset: 20,
+ Flags: 0x10,
+ WindowSize: MAX_WINDOW_SIZE,
+ Checksum: 0,
+ UrgentPointer: 0,
+ }
+ // make the payload
+ payloadToSend := []byte{}
+ err := SendTCP(tcpHdr, payloadToSend, hdr.Dst, hdr.Src)
+ if err != nil {
+ fmt.Println(err)
+ }
+
socketEntry.Conn.SendBuffer.una += uint32(len(tcpPayload))
+
+ ptr := socketEntry.Conn.RecvBuffer.recvNext
+ l := uint32(len(tcpPayload))
+ copy(socketEntry.Conn.RecvBuffer.buffer[ptr:ptr+l], tcpPayload)
+ socketEntry.Conn.RecvBuffer.recvNext += l
+ fmt.Println("recvNext: ", socketEntry.Conn.RecvBuffer.recvNext)
+ fmt.Println("recvBuffer: ", socketEntry.Conn.RecvBuffer.buffer)
break
}
+
mapMutex.Lock()
for _, socketEntry := range VHostSocketMaps {
if socketEntry.LocalPort == tcpHdr.DstPort && socketEntry.LocalIP == hdr.Dst.String() && socketEntry.State == SYNRECIEVED {
@@ -1513,7 +1521,7 @@ func (c *VTCPConn) VWrite(payload []byte) (int, error) {
SeqNum: c.SendBuffer.nxt,
AckNum: c.SendBuffer.una,
DataOffset: 20,
- Flags: header.TCPFlagSyn,
+ Flags: header.TCPFlagAck,
WindowSize: uint16(advertisedWindow),
Checksum: 0,
UrgentPointer: 0,
diff --git a/vhost b/vhost
index 71946eb..82caaa7 100755
--- a/vhost
+++ b/vhost
Binary files differ
diff --git a/vrouter b/vrouter
index 707d2d0..e0eee04 100755
--- a/vrouter
+++ b/vrouter
Binary files differ