Developing lightweight computation at the DSG edge
Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
LightKone
go-ping
Commits
3745d7b5
Commit
3745d7b5
authored
Mar 05, 2018
by
Clint Armstrong
Committed by
Cameron Sparr
May 28, 2019
Browse files
expose ttl on returned ping
parent
ef3ab45e
Changes
2
Hide whitespace changes
Inline
Side-by-side
cmd/ping/ping.go
View file @
3745d7b5
...
...
@@ -65,8 +65,8 @@ func main() {
}()
pinger
.
OnRecv
=
func
(
pkt
*
ping
.
Packet
)
{
fmt
.
Printf
(
"%d bytes from %s: icmp_seq=%d time=%v
\n
"
,
pkt
.
Nbytes
,
pkt
.
IPAddr
,
pkt
.
Seq
,
pkt
.
Rtt
)
fmt
.
Printf
(
"%d bytes from %s: icmp_seq=%d time=%v
ttl=%v
\n
"
,
pkt
.
Nbytes
,
pkt
.
IPAddr
,
pkt
.
Seq
,
pkt
.
Rtt
,
pkt
.
Ttl
)
}
pinger
.
OnFinish
=
func
(
stats
*
ping
.
Statistics
)
{
fmt
.
Printf
(
"
\n
--- %s ping statistics ---
\n
"
,
stats
.
Addr
)
...
...
ping.go
View file @
3745d7b5
...
...
@@ -154,6 +154,7 @@ type Pinger struct {
type
packet
struct
{
bytes
[]
byte
nbytes
int
ttl
int
}
// Packet represents a received and processed ICMP echo packet.
...
...
@@ -172,6 +173,9 @@ type Packet struct {
// Seq is the ICMP sequence number.
Seq
int
// TTL is the TTL on the packet
Ttl
int
}
// Statistics represent the stats of a currently running or finished
...
...
@@ -276,10 +280,12 @@ func (p *Pinger) run() {
if
conn
=
p
.
listen
(
ipv4Proto
[
p
.
network
],
p
.
source
);
conn
==
nil
{
return
}
conn
.
IPv4PacketConn
()
.
SetControlMessage
(
ipv4
.
FlagTTL
,
true
)
}
else
{
if
conn
=
p
.
listen
(
ipv6Proto
[
p
.
network
],
p
.
source
);
conn
==
nil
{
return
}
conn
.
IPv6PacketConn
()
.
SetControlMessage
(
ipv6
.
FlagHopLimit
,
true
)
}
defer
conn
.
Close
()
defer
p
.
finish
()
...
...
@@ -397,7 +403,21 @@ func (p *Pinger) recvICMP(
default
:
bytes
:=
make
([]
byte
,
512
)
conn
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
time
.
Millisecond
*
100
))
n
,
_
,
err
:=
conn
.
ReadFrom
(
bytes
)
var
n
,
ttl
int
var
err
error
if
p
.
ipv4
{
var
cm
*
ipv4
.
ControlMessage
n
,
cm
,
_
,
err
=
conn
.
IPv4PacketConn
()
.
ReadFrom
(
bytes
)
if
cm
!=
nil
{
ttl
=
cm
.
TTL
}
}
else
{
var
cm
*
ipv6
.
ControlMessage
n
,
cm
,
_
,
err
=
conn
.
IPv6PacketConn
()
.
ReadFrom
(
bytes
)
if
cm
!=
nil
{
ttl
=
cm
.
HopLimit
}
}
if
err
!=
nil
{
if
neterr
,
ok
:=
err
.
(
*
net
.
OpError
);
ok
{
if
neterr
.
Timeout
()
{
...
...
@@ -410,7 +430,7 @@ func (p *Pinger) recvICMP(
}
}
recv
<-
&
packet
{
bytes
:
bytes
,
nbytes
:
n
}
recv
<-
&
packet
{
bytes
:
bytes
,
nbytes
:
n
,
ttl
:
ttl
}
}
}
}
...
...
@@ -465,6 +485,7 @@ func (p *Pinger) processPacket(recv *packet) error {
Nbytes
:
recv
.
nbytes
,
IPAddr
:
p
.
ipaddr
,
Addr
:
p
.
addr
,
Ttl
:
recv
.
ttl
,
}
switch
pkt
:=
m
.
Body
.
(
type
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment