| 104 | } |
| 105 | |
| 106 | func (r *Receiver) handlePacket(rawPacket gopacket.Packet) { |
| 107 | defer func() { |
| 108 | if !r.decRunningHandlers() { |
| 109 | log.Fatal("decRunningHandlers: number of goroutines negative") |
| 110 | } |
| 111 | }() |
| 112 | |
| 113 | ptpSync, srcIP, srcPort, err := parseSyncPacket(rawPacket) |
| 114 | if err != nil { |
| 115 | log.Tracef("unable to parse PTP: %v", err) |
| 116 | return |
| 117 | } |
| 118 | if ptpSync.ControlField != ZiffyHexa { |
| 119 | log.Trace("no ziffy packet") |
| 120 | return |
| 121 | } |
| 122 | |
| 123 | log.Debugf("Type=%v, CF=%v, sPort=%v, sPort2=%v, sIP=%v", ptpSync.MessageType().String(), |
| 124 | ptpSync.CorrectionField, ptpSync.SourcePortIdentity.PortNumber, srcPort, srcIP) |
| 125 | |
| 126 | if err := r.sendResponse(srcIP, rawPacket); err != nil { |
| 127 | log.Tracef("unable to send response: %v", err) |
| 128 | return |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | // sendResponse sends ICMPTypeTimeExceeded to sender |
| 133 | func (r *Receiver) sendResponse(sourceIP string, rawPacket gopacket.Packet) error { |