Developing lightweight computation at the DSG edge

Commit d046b245 authored by webfrank's avatar webfrank Committed by Cameron Sparr
Browse files

Added ICMP Packet ID to distinguish ICMP replies in multithreading environment (#15)

parent 5740bb1f
......@@ -90,7 +90,10 @@ func NewPinger(addr string) (*Pinger, error) {
Interval: time.Second,
Timeout: time.Second * 100000,
Count: -1,
id: rand.Intn(0xffff),
network: "udp",
ipv4: ipv4,
size: timeSliceLength,
network: "udp",
ipv4: ipv4,
Size: timeSliceLength,
......@@ -140,9 +143,10 @@ type Pinger struct {
ipaddr *net.IPAddr
addr string
ipv4 bool
source string
ipv4 bool
source string
size int
id int
sequence int
network string
}
......@@ -430,6 +434,12 @@ func (p *Pinger) processPacket(recv *packet) error {
return nil
}
// Check if reply from same ID
body := m.Body.(*icmp.Echo)
if body.ID != p.id {
return nil
}
outPkt := &Packet{
Nbytes: recv.nbytes,
IPAddr: p.ipaddr,
......@@ -475,7 +485,7 @@ func (p *Pinger) sendICMP(conn *icmp.PacketConn) error {
bytes, err := (&icmp.Message{
Type: typ, Code: 0,
Body: &icmp.Echo{
ID: rand.Intn(65535),
ID: p.id,
Seq: p.sequence,
Data: t,
},
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment