func ProcessMessage()

in pkg/tcp_metrics/inetdiag/inetdiag.go [143:171]


func ProcessMessage(m *syscall.NetlinkMessage, seq uint32, pid uint32) (msg *syscall.NetlinkMessage, shouldContinue bool, err error) {
	if m.Header.Seq != seq {
		fmt.Printf("Wrong Seq nr %d, expected %d", m.Header.Seq, seq)
		return nil, false, ErrBadSequence
	}
	if m.Header.Pid != pid {
		fmt.Printf("Wrong pid %d, expected %d", m.Header.Pid, pid)
		return nil, false, ErrBadPid
	}
	if m.Header.Type == unix.NLMSG_DONE {
		return nil, false, nil
	}
	if m.Header.Type == unix.NLMSG_ERROR {
		native := nl.NativeEndian()
		if len(m.Data) < 4 {
			return nil, false, ErrBadMsgData
		}
		error := int32(native.Uint32(m.Data[0:4]))
		if error == 0 {
			return nil, false, nil
		}
		fmt.Println(syscall.Errno(-error))

	}
	if m.Header.Flags&unix.NLM_F_MULTI == 0 {
		return m, false, nil
	}
	return m, true, nil
}