aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2023-11-09 12:34:51 -0500
committersotech117 <michael_foiani@brown.edu>2023-11-09 12:34:51 -0500
commit824b5dd6b67d18d4e708f6d9a0273151fe3d5ae1 (patch)
tree384c3c6a37751dee8ad6590e0598cfad94f87e9a
parent123562ac8a8b98fabf8669ae7b660d0d9fac176b (diff)
parentf669b080f92f49e28fcb00be5f44d9b342ec9cef (diff)
Merge branch 'main' of https://github.com/brown-cs1680-f23/iptcp-jailpt2
Merge with david's ack fix.
-rw-r--r--pkg/ipstack/ipstack.go77
-rwxr-xr-xvhostbin3191134 -> 3179481 bytes
-rwxr-xr-xvrouterbin3183073 -> 3146532 bytes
3 files changed, 43 insertions, 34 deletions
diff --git a/pkg/ipstack/ipstack.go b/pkg/ipstack/ipstack.go
index 4a5fe30..afe3bc5 100644
--- a/pkg/ipstack/ipstack.go
+++ b/pkg/ipstack/ipstack.go
@@ -891,36 +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: startingSeqNum,
- AckNum: tcpHdr.SeqNum + 1, // FIXME: in the ACK case, this should be plus the size of the data
- 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)
- break
- }
// add to table if available
mapMutex.Lock()
for _, socketEntry := range VHostSocketMaps {
@@ -1006,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 {
@@ -1512,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 97c346a..82caaa7 100755
--- a/vhost
+++ b/vhost
Binary files differ
diff --git a/vrouter b/vrouter
index f473f0d..e0eee04 100755
--- a/vrouter
+++ b/vrouter
Binary files differ