* Re: [BUG] Regression with commit: ptp: Add .getmaxphase callback to ptp_clock_info
2024-09-11 4:14 ` Richard Cochran
@ 2024-09-12 14:51 ` Christophe ROULLIER
2024-09-13 3:55 ` Richard Cochran
0 siblings, 1 reply; 7+ messages in thread
From: Christophe ROULLIER @ 2024-09-12 14:51 UTC (permalink / raw)
To: Richard Cochran
Cc: Rahul Rameshbabu, netdev, David S. Miller, Jakub Kicinski,
Shuah Khan, Maciek Machnikowski
[-- Attachment #1: Type: text/plain, Size: 4262 bytes --]
Hi Richard,
I put in attachment result of pahole.
It is :
struct ptp_clock_caps {
int max_adj; /* 0 4 */
int n_alarm; /* 4 4 */
int n_ext_ts; /* 8 4 */
int n_per_out; /* 12 4 */
int pps; /* 16 4 */
int n_pins; /* 20 4 */
int cross_timestamping; /* 24 4 */
int adjust_phase; /* 28 4 */
int max_phase_adj; /* 32 4 */
int rsv[11]; /* 36 44 */
/* size: 80, cachelines: 2, members: 10 */
/* last cacheline: 16 bytes */
};
ptp4l used: ptp4l -v
4.1
Thanks,
BR
Christophe
On 9/11/24 06:14, Richard Cochran wrote:
> On Tue, Sep 10, 2024 at 08:49:57AM +0200, Christophe ROULLIER wrote:
>> I've tested with platform 32bits and 64 bits and I have same error.
>>
>> Toolchain/compiler used are:
>>
>> aarch64-ostl-linux-gcc --version
>> aarch64-ostl-linux-gcc (GCC) 11.3.0
>> or
>>
>> arm-ostl-linux-gnueabi-gcc --version
>> arm-ostl-linux-gnueabi-gcc (GCC) 12.2.0
> Something is off.
>
> Can you run `pahole` on the ptp4l binaries that you are using, and
> check the layout of `struct ptp_clock_caps` ?
>
> It should look something like the ones below...
>
> Thanks,
> Richard
>
> ---
> struct ptp_clock_caps1 {
> int max_adj; /* 0 4 */
> int n_alarm; /* 4 4 */
> int n_ext_ts; /* 8 4 */
> int n_per_out; /* 12 4 */
> int pps; /* 16 4 */
> int rsv[15]; /* 20 60 */
>
> /* size: 80, cachelines: 2, members: 6 */
> /* last cacheline: 16 bytes */
> };
> struct ptp_clock_caps2 {
> int max_adj; /* 0 4 */
> int n_alarm; /* 4 4 */
> int n_ext_ts; /* 8 4 */
> int n_per_out; /* 12 4 */
> int pps; /* 16 4 */
> int n_pins; /* 20 4 */
> int cross_timestamping; /* 24 4 */
> int adjust_phase; /* 28 4 */
> int rsv[12]; /* 32 48 */
>
> /* size: 80, cachelines: 2, members: 9 */
> /* last cacheline: 16 bytes */
> };
> struct ptp_clock_caps3 {
> int max_adj; /* 0 4 */
> int n_alarm; /* 4 4 */
> int n_ext_ts; /* 8 4 */
> int n_per_out; /* 12 4 */
> int pps; /* 16 4 */
> int n_pins; /* 20 4 */
> int cross_timestamping; /* 24 4 */
> int adjust_phase; /* 28 4 */
> int max_phase_adj; /* 32 4 */
> int rsv[11]; /* 36 44 */
>
> /* size: 80, cachelines: 2, members: 10 */
> /* last cacheline: 16 bytes */
> };
[-- Attachment #2: pahole_ptp4l_aarch64 --]
[-- Type: text/plain, Size: 98864 bytes --]
struct _IO_FILE {
int _flags; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
char * _IO_read_ptr; /* 8 8 */
char * _IO_read_end; /* 16 8 */
char * _IO_read_base; /* 24 8 */
char * _IO_write_base; /* 32 8 */
char * _IO_write_ptr; /* 40 8 */
char * _IO_write_end; /* 48 8 */
char * _IO_buf_base; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
char * _IO_buf_end; /* 64 8 */
char * _IO_save_base; /* 72 8 */
char * _IO_backup_base; /* 80 8 */
char * _IO_save_end; /* 88 8 */
struct _IO_marker * _markers; /* 96 8 */
struct _IO_FILE * _chain; /* 104 8 */
int _fileno; /* 112 4 */
int _flags2; /* 116 4 */
__off_t _old_offset; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
short unsigned int _cur_column; /* 128 2 */
signed char _vtable_offset; /* 130 1 */
char _shortbuf[1]; /* 131 1 */
/* XXX 4 bytes hole, try to pack */
_IO_lock_t * _lock; /* 136 8 */
__off64_t _offset; /* 144 8 */
struct _IO_codecvt * _codecvt; /* 152 8 */
struct _IO_wide_data * _wide_data; /* 160 8 */
struct _IO_FILE * _freeres_list; /* 168 8 */
void * _freeres_buf; /* 176 8 */
size_t __pad5; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
int _mode; /* 192 4 */
char _unused2[20]; /* 196 20 */
/* size: 216, cachelines: 4, members: 29 */
/* sum members: 208, holes: 2, sum holes: 8 */
/* last cacheline: 24 bytes */
};
struct ClockIdentity {
Octet id[8]; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct PortIdentity {
struct ClockIdentity clockIdentity; /* 0 8 */
UInteger16 portNumber; /* 8 2 */
/* size: 10, cachelines: 1, members: 2 */
/* last cacheline: 10 bytes */
};
struct option {
const char * name; /* 0 8 */
int has_arg; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
int * flag; /* 16 8 */
int val; /* 24 4 */
/* size: 32, cachelines: 1, members: 4 */
/* sum members: 24, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 32 bytes */
};
struct sockaddr {
sa_family_t sa_family; /* 0 2 */
char sa_data[14]; /* 2 14 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct sockaddr_storage {
sa_family_t ss_family; /* 0 2 */
char __ss_padding[118]; /* 2 118 */
/* --- cacheline 1 boundary (64 bytes) was 56 bytes ago --- */
long unsigned int __ss_align; /* 120 8 */
/* size: 128, cachelines: 2, members: 3 */
};
struct sockaddr_in {
sa_family_t sin_family; /* 0 2 */
in_port_t sin_port; /* 2 2 */
struct in_addr sin_addr; /* 4 4 */
unsigned char sin_zero[8]; /* 8 8 */
/* size: 16, cachelines: 1, members: 4 */
/* last cacheline: 16 bytes */
};
struct sockaddr_in6 {
sa_family_t sin6_family; /* 0 2 */
in_port_t sin6_port; /* 2 2 */
uint32_t sin6_flowinfo; /* 4 4 */
struct in6_addr sin6_addr; /* 8 16 */
uint32_t sin6_scope_id; /* 24 4 */
/* size: 28, cachelines: 1, members: 5 */
/* last cacheline: 28 bytes */
};
struct sockaddr_un {
sa_family_t sun_family; /* 0 2 */
char sun_path[108]; /* 2 108 */
/* size: 110, cachelines: 2, members: 2 */
/* last cacheline: 46 bytes */
};
struct in_addr {
in_addr_t s_addr; /* 0 4 */
/* size: 4, cachelines: 1, members: 1 */
/* last cacheline: 4 bytes */
};
struct in6_addr {
union {
uint8_t __u6_addr8[16]; /* 0 16 */
uint16_t __u6_addr16[8]; /* 0 16 */
uint32_t __u6_addr32[4]; /* 0 16 */
} __in6_u; /* 0 16 */
/* size: 16, cachelines: 1, members: 1 */
/* last cacheline: 16 bytes */
};
struct sockaddr_ll {
short unsigned int sll_family; /* 0 2 */
short unsigned int sll_protocol; /* 2 2 */
int sll_ifindex; /* 4 4 */
short unsigned int sll_hatype; /* 8 2 */
unsigned char sll_pkttype; /* 10 1 */
unsigned char sll_halen; /* 11 1 */
unsigned char sll_addr[8]; /* 12 8 */
/* size: 20, cachelines: 1, members: 7 */
/* last cacheline: 20 bytes */
};
struct address {
socklen_t len; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
union {
struct sockaddr_storage ss; /* 8 128 */
struct sockaddr_ll sll; /* 8 20 */
struct sockaddr_in sin; /* 8 16 */
struct sockaddr_in6 sin6; /* 8 28 */
struct sockaddr_un sun; /* 8 110 */
struct sockaddr sa; /* 8 16 */
}; /* 8 128 */
/* size: 136, cachelines: 3, members: 2 */
/* sum members: 132, holes: 1, sum holes: 4 */
/* last cacheline: 8 bytes */
};
struct unicast_master_address {
struct {
struct unicast_master_address * stqe_next; /* 0 8 */
} list; /* 0 8 */
struct PortIdentity portIdentity; /* 8 10 */
/* XXX 2 bytes hole, try to pack */
enum transport_type type; /* 20 4 */
enum unicast_state state; /* 24 4 */
/* XXX 4 bytes hole, try to pack */
struct address address; /* 32 136 */
/* --- cacheline 2 boundary (128 bytes) was 40 bytes ago --- */
unsigned int granted; /* 168 4 */
unsigned int sydymsk; /* 172 4 */
time_t renewal_tmo; /* 176 8 */
/* size: 184, cachelines: 3, members: 8 */
/* sum members: 178, holes: 2, sum holes: 6 */
/* last cacheline: 56 bytes */
};
struct addrs_head {
struct unicast_master_address * stqh_first; /* 0 8 */
struct unicast_master_address * * stqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct unicast_master_table {
struct addrs_head addrs; /* 0 16 */
struct {
struct unicast_master_table * stqe_next; /* 16 8 */
} list; /* 16 8 */
Integer8 logQueryInterval; /* 24 1 */
/* XXX 3 bytes hole, try to pack */
int table_index; /* 28 4 */
int count; /* 32 4 */
int port; /* 36 4 */
struct unicast_master_address peer_addr; /* 40 184 */
/* --- cacheline 3 boundary (192 bytes) was 32 bytes ago --- */
char * peer_name; /* 224 8 */
/* size: 232, cachelines: 4, members: 8 */
/* sum members: 229, holes: 1, sum holes: 3 */
/* last cacheline: 40 bytes */
};
struct interfaces_head {
struct interface * stqh_first; /* 0 8 */
struct interface * * stqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct ucmtab_head {
struct unicast_master_table * stqh_first; /* 0 8 */
struct unicast_master_table * * stqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct config {
struct interfaces_head interfaces; /* 0 16 */
int n_interfaces; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
struct option * opts; /* 24 8 */
struct hash * htab; /* 32 8 */
struct ucmtab_head unicast_master_tables; /* 40 16 */
/* size: 56, cachelines: 1, members: 5 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct ClockQuality {
UInteger8 clockClass; /* 0 1 */
Enumeration8 clockAccuracy; /* 1 1 */
UInteger16 offsetScaledLogVariance; /* 2 2 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct dataset {
UInteger8 priority1; /* 0 1 */
struct ClockIdentity identity; /* 1 8 */
struct ClockQuality quality; /* 9 4 */
UInteger8 priority2; /* 13 1 */
UInteger8 localPriority; /* 14 1 */
/* XXX 1 byte hole, try to pack */
UInteger16 stepsRemoved; /* 16 2 */
struct PortIdentity sender; /* 18 10 */
struct PortIdentity receiver; /* 28 10 */
/* size: 38, cachelines: 1, members: 8 */
/* sum members: 37, holes: 1, sum holes: 1 */
/* last cacheline: 38 bytes */
};
struct timespec {
__time_t tv_sec; /* 0 8 */
__syscall_slong_t tv_nsec; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct pollfd {
int fd; /* 0 4 */
short int events; /* 4 2 */
short int revents; /* 6 2 */
/* size: 8, cachelines: 1, members: 3 */
/* last cacheline: 8 bytes */
};
struct Timestamp {
uint16_t seconds_msb; /* 0 2 */
uint32_t seconds_lsb; /* 2 4 */
UInteger32 nanoseconds; /* 6 4 */
/* size: 10, cachelines: 1, members: 3 */
/* last cacheline: 10 bytes */
} __attribute__((__packed__));
struct timestamp {
uint64_t sec; /* 0 8 */
UInteger32 nsec; /* 8 4 */
/* size: 16, cachelines: 1, members: 2 */
/* padding: 4 */
/* last cacheline: 16 bytes */
};
struct PortAddress {
Enumeration16 networkProtocol; /* 0 2 */
UInteger16 addressLength; /* 2 2 */
Octet address[]; /* 4 0 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct PhysicalAddress {
UInteger16 length; /* 0 2 */
Octet address[]; /* 2 0 */
/* size: 2, cachelines: 1, members: 2 */
/* last cacheline: 2 bytes */
};
struct TLV {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet value[]; /* 4 0 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct PTPText {
UInteger8 length; /* 0 1 */
Octet text[]; /* 1 0 */
/* size: 1, cachelines: 1, members: 2 */
/* last cacheline: 1 bytes */
};
struct static_ptp_text {
Octet text[256]; /* 0 256 */
/* --- cacheline 4 boundary (256 bytes) --- */
int length; /* 256 4 */
int max_symbols; /* 260 4 */
/* size: 264, cachelines: 5, members: 3 */
/* last cacheline: 8 bytes */
};
struct fault_interval {
enum fault_tmo_type type; /* 0 4 */
int32_t val; /* 4 4 */
/* size: 8, cachelines: 1, members: 2 */
/* last cacheline: 8 bytes */
};
struct defaultDS {
UInteger8 flags; /* 0 1 */
UInteger8 reserved1; /* 1 1 */
UInteger16 numberPorts; /* 2 2 */
UInteger8 priority1; /* 4 1 */
struct ClockQuality clockQuality; /* 5 4 */
UInteger8 priority2; /* 9 1 */
struct ClockIdentity clockIdentity; /* 10 8 */
UInteger8 domainNumber; /* 18 1 */
UInteger8 reserved2; /* 19 1 */
/* size: 20, cachelines: 1, members: 9 */
/* last cacheline: 20 bytes */
} __attribute__((__packed__));
struct clock_description {
struct static_ptp_text productDescription; /* 0 264 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
struct static_ptp_text revisionData; /* 264 264 */
/* --- cacheline 8 boundary (512 bytes) was 16 bytes ago --- */
struct static_ptp_text userDescription; /* 528 264 */
/* --- cacheline 12 boundary (768 bytes) was 24 bytes ago --- */
Octet manufacturerIdentity[3]; /* 792 3 */
/* size: 796, cachelines: 13, members: 4 */
/* padding: 1 */
/* last cacheline: 28 bytes */
};
struct currentDS {
UInteger16 stepsRemoved; /* 0 2 */
TimeInterval offsetFromMaster; /* 2 8 */
TimeInterval meanPathDelay; /* 10 8 */
/* size: 18, cachelines: 1, members: 3 */
/* last cacheline: 18 bytes */
} __attribute__((__packed__));
struct parentDS {
struct PortIdentity parentPortIdentity; /* 0 10 */
UInteger8 parentStats; /* 10 1 */
UInteger8 reserved; /* 11 1 */
UInteger16 observedParentOffsetScaledLogVariance; /* 12 2 */
Integer32 observedParentClockPhaseChangeRate; /* 14 4 */
UInteger8 grandmasterPriority1; /* 18 1 */
struct ClockQuality grandmasterClockQuality; /* 19 4 */
UInteger8 grandmasterPriority2; /* 23 1 */
struct ClockIdentity grandmasterIdentity; /* 24 8 */
/* size: 32, cachelines: 1, members: 9 */
/* last cacheline: 32 bytes */
} __attribute__((__packed__));
struct parent_ds {
struct parentDS pds; /* 0 32 */
struct ClockIdentity * ptl; /* 32 8 */
unsigned int path_length; /* 40 4 */
/* size: 48, cachelines: 1, members: 3 */
/* padding: 4 */
/* last cacheline: 48 bytes */
};
struct timePropertiesDS {
Integer16 currentUtcOffset; /* 0 2 */
UInteger8 flags; /* 2 1 */
Enumeration8 timeSource; /* 3 1 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct fdarray {
int fd[11]; /* 0 44 */
/* size: 44, cachelines: 1, members: 1 */
/* last cacheline: 44 bytes */
};
struct alternate_time_offset_indicator_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
UInteger8 keyField; /* 4 1 */
Integer32 currentOffset; /* 5 4 */
Integer32 jumpSeconds; /* 9 4 */
struct {
uint16_t seconds_msb; /* 13 2 */
uint32_t seconds_lsb; /* 15 4 */
} __attribute__((__packed__)) timeOfNextJump; /* 13 6 */
struct PTPText displayName; /* 19 1 */
/* size: 20, cachelines: 1, members: 7 */
/* last cacheline: 20 bytes */
} __attribute__((__packed__));
struct alternate_time_offset_name {
UInteger8 keyField; /* 0 1 */
struct PTPText displayName; /* 1 1 */
/* size: 2, cachelines: 1, members: 2 */
/* last cacheline: 2 bytes */
};
struct alternate_time_offset_properties {
UInteger8 keyField; /* 0 1 */
Integer32 currentOffset; /* 1 4 */
Integer32 jumpSeconds; /* 5 4 */
struct {
uint16_t seconds_msb; /* 9 2 */
uint32_t seconds_lsb; /* 11 4 */
} __attribute__((__packed__)) timeOfNextJump; /* 9 6 */
uint8_t pad; /* 15 1 */
/* size: 16, cachelines: 1, members: 5 */
/* last cacheline: 16 bytes */
} __attribute__((__packed__));
struct management_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Enumeration16 id; /* 4 2 */
Octet data[]; /* 6 0 */
/* size: 6, cachelines: 1, members: 4 */
/* last cacheline: 6 bytes */
};
struct management_tlv_datum {
uint8_t val; /* 0 1 */
uint8_t reserved; /* 1 1 */
/* size: 2, cachelines: 1, members: 2 */
/* last cacheline: 2 bytes */
};
struct nsm_resp_tlv_foot {
struct parentDS parent; /* 0 32 */
struct currentDS current; /* 32 18 */
struct timePropertiesDS timeprop; /* 50 4 */
struct Timestamp lastsync; /* 54 10 */
/* size: 64, cachelines: 1, members: 4 */
} __attribute__((__packed__));
struct Integer96 {
uint16_t nanoseconds_msb; /* 0 2 */
uint64_t nanoseconds_lsb; /* 2 8 */
uint16_t fractional_nanoseconds; /* 10 2 */
/* size: 12, cachelines: 1, members: 3 */
/* last cacheline: 12 bytes */
} __attribute__((__packed__));
struct follow_up_info_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
Integer32 cumulativeScaledRateOffset; /* 10 4 */
UInteger16 gmTimeBaseIndicator; /* 14 2 */
ScaledNs lastGmPhaseChange; /* 16 12 */
Integer32 scaledLastGmPhaseChange; /* 28 4 */
/* size: 32, cachelines: 1, members: 8 */
/* last cacheline: 32 bytes */
} __attribute__((__packed__));
struct time_status_np {
int64_t master_offset; /* 0 8 */
int64_t ingress_time; /* 8 8 */
Integer32 cumulativeScaledRateOffset; /* 16 4 */
Integer32 scaledLastGmPhaseChange; /* 20 4 */
UInteger16 gmTimeBaseIndicator; /* 24 2 */
ScaledNs lastGmPhaseChange; /* 26 12 */
Integer32 gmPresent; /* 38 4 */
struct ClockIdentity gmIdentity; /* 42 8 */
/* size: 50, cachelines: 1, members: 8 */
/* last cacheline: 50 bytes */
} __attribute__((__packed__));
struct grandmaster_settings_np {
struct ClockQuality clockQuality; /* 0 4 */
Integer16 utc_offset; /* 4 2 */
UInteger8 time_flags; /* 6 1 */
Enumeration8 time_source; /* 7 1 */
/* size: 8, cachelines: 1, members: 4 */
/* last cacheline: 8 bytes */
};
struct subscribe_events_np {
uint16_t duration; /* 0 2 */
uint8_t bitmask[64]; /* 2 64 */
/* size: 66, cachelines: 2, members: 2 */
/* last cacheline: 2 bytes */
};
struct mgmt_clock_description {
UInteger16 * clockType; /* 0 8 */
struct PTPText * physicalLayerProtocol; /* 8 8 */
struct PhysicalAddress * physicalAddress; /* 16 8 */
struct PortAddress * protocolAddress; /* 24 8 */
Octet * manufacturerIdentity; /* 32 8 */
struct PTPText * productDescription; /* 40 8 */
struct PTPText * revisionData; /* 48 8 */
struct PTPText * userDescription; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
Octet * profileIdentity; /* 64 8 */
/* size: 72, cachelines: 2, members: 9 */
/* last cacheline: 8 bytes */
};
struct tlv_extra {
struct {
struct tlv_extra * tqe_next; /* 0 8 */
struct tlv_extra * * tqe_prev; /* 8 8 */
} list; /* 0 16 */
struct TLV * tlv; /* 16 8 */
union {
struct mgmt_clock_description cd; /* 24 72 */
struct nsm_resp_tlv_foot * foot; /* 24 8 */
}; /* 24 72 */
/* size: 96, cachelines: 2, members: 3 */
/* last cacheline: 32 bytes */
};
struct hw_timestamp {
enum timestamp_type type; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
tmv_t ts; /* 8 8 */
tmv_t sw; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 20, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
struct ptp_header {
uint8_t tsmt; /* 0 1 */
uint8_t ver; /* 1 1 */
UInteger16 messageLength; /* 2 2 */
UInteger8 domainNumber; /* 4 1 */
Octet reserved1; /* 5 1 */
Octet flagField[2]; /* 6 2 */
Integer64 correction; /* 8 8 */
UInteger32 reserved2; /* 16 4 */
struct PortIdentity sourcePortIdentity; /* 20 10 */
UInteger16 sequenceId; /* 30 2 */
UInteger8 control; /* 32 1 */
Integer8 logMessageInterval; /* 33 1 */
/* size: 34, cachelines: 1, members: 12 */
/* last cacheline: 34 bytes */
} __attribute__((__packed__));
struct announce_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp originTimestamp; /* 34 10 */
Integer16 currentUtcOffset; /* 44 2 */
Octet reserved; /* 46 1 */
UInteger8 grandmasterPriority1; /* 47 1 */
struct ClockQuality grandmasterClockQuality; /* 48 4 */
UInteger8 grandmasterPriority2; /* 52 1 */
struct ClockIdentity grandmasterIdentity; /* 53 8 */
UInteger16 stepsRemoved; /* 61 2 */
Enumeration8 timeSource; /* 63 1 */
/* --- cacheline 1 boundary (64 bytes) --- */
uint8_t suffix[]; /* 64 0 */
/* size: 64, cachelines: 1, members: 11 */
} __attribute__((__packed__));
struct sync_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp originTimestamp; /* 34 10 */
uint8_t suffix[]; /* 44 0 */
/* size: 44, cachelines: 1, members: 3 */
/* last cacheline: 44 bytes */
} __attribute__((__packed__));
struct delay_req_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp originTimestamp; /* 34 10 */
uint8_t suffix[]; /* 44 0 */
/* size: 44, cachelines: 1, members: 3 */
/* last cacheline: 44 bytes */
} __attribute__((__packed__));
struct follow_up_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp preciseOriginTimestamp; /* 34 10 */
uint8_t suffix[]; /* 44 0 */
/* size: 44, cachelines: 1, members: 3 */
/* last cacheline: 44 bytes */
} __attribute__((__packed__));
struct delay_resp_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp receiveTimestamp; /* 34 10 */
struct PortIdentity requestingPortIdentity; /* 44 10 */
uint8_t suffix[]; /* 54 0 */
/* size: 54, cachelines: 1, members: 4 */
/* last cacheline: 54 bytes */
} __attribute__((__packed__));
struct pdelay_req_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp originTimestamp; /* 34 10 */
struct PortIdentity reserved; /* 44 10 */
uint8_t suffix[]; /* 54 0 */
/* size: 54, cachelines: 1, members: 4 */
/* last cacheline: 54 bytes */
} __attribute__((__packed__));
struct pdelay_resp_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp requestReceiptTimestamp; /* 34 10 */
struct PortIdentity requestingPortIdentity; /* 44 10 */
uint8_t suffix[]; /* 54 0 */
/* size: 54, cachelines: 1, members: 4 */
/* last cacheline: 54 bytes */
} __attribute__((__packed__));
struct pdelay_resp_fup_msg {
struct ptp_header hdr; /* 0 34 */
struct Timestamp responseOriginTimestamp; /* 34 10 */
struct PortIdentity requestingPortIdentity; /* 44 10 */
uint8_t suffix[]; /* 54 0 */
/* size: 54, cachelines: 1, members: 4 */
/* last cacheline: 54 bytes */
} __attribute__((__packed__));
struct signaling_msg {
struct ptp_header hdr; /* 0 34 */
struct PortIdentity targetPortIdentity; /* 34 10 */
uint8_t suffix[]; /* 44 0 */
/* size: 44, cachelines: 1, members: 3 */
/* last cacheline: 44 bytes */
} __attribute__((__packed__));
struct management_msg {
struct ptp_header hdr; /* 0 34 */
struct PortIdentity targetPortIdentity; /* 34 10 */
UInteger8 startingBoundaryHops; /* 44 1 */
UInteger8 boundaryHops; /* 45 1 */
uint8_t flags; /* 46 1 */
uint8_t reserved; /* 47 1 */
uint8_t suffix[]; /* 48 0 */
/* size: 48, cachelines: 1, members: 7 */
/* last cacheline: 48 bytes */
};
struct message_data {
uint8_t buffer[1500]; /* 0 1500 */
/* size: 1500, cachelines: 24, members: 1 */
/* last cacheline: 28 bytes */
};
struct ptp_message {
union {
struct ptp_header header; /* 0 34 */
struct announce_msg announce; /* 0 64 */
struct sync_msg sync; /* 0 44 */
struct delay_req_msg delay_req; /* 0 44 */
struct follow_up_msg follow_up; /* 0 44 */
struct delay_resp_msg delay_resp; /* 0 54 */
struct pdelay_req_msg pdelay_req; /* 0 54 */
struct pdelay_resp_msg pdelay_resp; /* 0 54 */
struct pdelay_resp_fup_msg pdelay_resp_fup; /* 0 54 */
struct signaling_msg signaling; /* 0 44 */
struct management_msg management; /* 0 48 */
struct message_data data; /* 0 1500 */
}; /* 0 1500 */
/* --- cacheline 23 boundary (1472 bytes) was 28 bytes ago --- */
int tail_room; /* 1500 4 */
int refcnt; /* 1504 4 */
/* XXX 4 bytes hole, try to pack */
struct {
struct ptp_message * tqe_next; /* 1512 8 */
struct ptp_message * * tqe_prev; /* 1520 8 */
} list; /* 1512 16 */
struct {
struct timestamp pdu; /* 1528 16 */
/* XXX last struct has 4 bytes of padding */
/* --- cacheline 24 boundary (1536 bytes) was 8 bytes ago --- */
struct timespec host; /* 1544 16 */
} ts; /* 1528 32 */
struct hw_timestamp hwts; /* 1560 24 */
struct address address; /* 1584 136 */
/* --- cacheline 26 boundary (1664 bytes) was 56 bytes ago --- */
struct tlv_list tlv_list; /* 1720 16 */
/* size: 1736, cachelines: 28, members: 8 */
/* sum members: 1732, holes: 1, sum holes: 4 */
/* last cacheline: 8 bytes */
};
struct tlv_list {
struct tlv_extra * tqh_first; /* 0 8 */
struct tlv_extra * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct interface {
struct {
struct interface * stqe_next; /* 0 8 */
} list; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct foreign_clock {
struct {
struct foreign_clock * le_next; /* 0 8 */
struct foreign_clock * * le_prev; /* 8 8 */
} list; /* 0 16 */
struct messages messages; /* 16 16 */
unsigned int n_messages; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
struct port * port; /* 40 8 */
struct dataset dataset; /* 48 38 */
/* size: 88, cachelines: 2, members: 5 */
/* sum members: 82, holes: 1, sum holes: 4 */
/* padding: 2 */
/* last cacheline: 24 bytes */
};
struct messages {
struct ptp_message * tqh_first; /* 0 8 */
struct ptp_message * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct port {
struct {
struct port * le_next; /* 0 8 */
struct port * * le_prev; /* 8 8 */
} list; /* 0 16 */
/* size: 16, cachelines: 1, members: 1 */
/* last cacheline: 16 bytes */
};
struct stats_result {
double min; /* 0 8 */
double max; /* 8 8 */
double max_abs; /* 16 8 */
double mean; /* 24 8 */
double rms; /* 32 8 */
double stddev; /* 40 8 */
/* size: 48, cachelines: 1, members: 6 */
/* last cacheline: 48 bytes */
};
struct freq_estimator {
tmv_t origin1; /* 0 8 */
tmv_t ingress1; /* 8 8 */
unsigned int max_count; /* 16 4 */
unsigned int count; /* 20 4 */
/* size: 24, cachelines: 1, members: 4 */
/* last cacheline: 24 bytes */
};
struct clock_stats {
struct stats * offset; /* 0 8 */
struct stats * freq; /* 8 8 */
struct stats * delay; /* 16 8 */
unsigned int max_count; /* 24 4 */
/* size: 32, cachelines: 1, members: 4 */
/* padding: 4 */
/* last cacheline: 32 bytes */
};
struct clock_subscriber {
struct {
struct clock_subscriber * le_next; /* 0 8 */
struct clock_subscriber * * le_prev; /* 8 8 */
} list; /* 0 16 */
uint8_t events[64]; /* 16 64 */
/* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */
struct PortIdentity targetPortIdentity; /* 80 10 */
/* XXX 6 bytes hole, try to pack */
struct address addr; /* 96 136 */
/* --- cacheline 3 boundary (192 bytes) was 40 bytes ago --- */
UInteger16 sequenceId; /* 232 2 */
/* XXX 6 bytes hole, try to pack */
time_t expiration; /* 240 8 */
/* size: 248, cachelines: 4, members: 6 */
/* sum members: 236, holes: 2, sum holes: 12 */
/* last cacheline: 56 bytes */
};
struct time_zone {
_Bool enabled; /* 0 1 */
/* XXX 3 bytes hole, try to pack */
int32_t current_offset; /* 4 4 */
int32_t jump_seconds; /* 8 4 */
uint16_t next_jump_msb; /* 12 2 */
/* XXX 2 bytes hole, try to pack */
uint32_t next_jump_lsb; /* 16 4 */
struct static_ptp_text display_name; /* 20 264 */
/* size: 284, cachelines: 5, members: 6 */
/* sum members: 279, holes: 2, sum holes: 5 */
/* last cacheline: 28 bytes */
};
struct ports_head {
struct port * lh_first; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct clock_subscribers_head {
struct clock_subscriber * lh_first; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct clock {
enum clock_type type; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
struct config * config; /* 8 8 */
clockid_t clkid; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
struct servo * servo; /* 24 8 */
enum servo_type servo_type; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
int (*dscmp)(struct dataset *, struct dataset *); /* 40 8 */
struct defaultDS dds; /* 48 20 */
/* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */
struct dataset default_dataset; /* 68 38 */
struct currentDS cur; /* 106 18 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
struct parent_ds dad; /* 128 48 */
/* XXX last struct has 4 bytes of padding */
struct timePropertiesDS tds; /* 176 4 */
struct ClockIdentity ptl[179]; /* 180 1432 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 25 boundary (1600 bytes) was 16 bytes ago --- */
struct foreign_clock * best; /* 1616 8 */
struct ClockIdentity best_id; /* 1624 8 */
struct ports_head ports; /* 1632 8 */
struct port * uds_rw_port; /* 1640 8 */
struct port * uds_ro_port; /* 1648 8 */
struct pollfd * pollfd; /* 1656 8 */
/* --- cacheline 26 boundary (1664 bytes) --- */
int pollfd_valid; /* 1664 4 */
int nports; /* 1668 4 */
int last_port_number; /* 1672 4 */
int sde; /* 1676 4 */
int free_running; /* 1680 4 */
int freq_est_interval; /* 1684 4 */
int local_sync_uncertain; /* 1688 4 */
int write_phase_mode; /* 1692 4 */
int grand_master_capable; /* 1696 4 */
int utc_timescale; /* 1700 4 */
int utc_offset_set; /* 1704 4 */
int leap_set; /* 1708 4 */
int kernel_leap; /* 1712 4 */
int utc_offset; /* 1716 4 */
int time_flags; /* 1720 4 */
int time_source; /* 1724 4 */
/* --- cacheline 27 boundary (1728 bytes) --- */
UInteger8 clock_class_threshold; /* 1728 1 */
UInteger8 max_steps_removed; /* 1729 1 */
/* XXX 2 bytes hole, try to pack */
enum servo_state servo_state; /* 1732 4 */
enum timestamp_type timestamping; /* 1736 4 */
/* XXX 4 bytes hole, try to pack */
tmv_t master_offset; /* 1744 8 */
tmv_t path_delay; /* 1752 8 */
tmv_t ingress_ts; /* 1760 8 */
tmv_t initial_delay; /* 1768 8 */
struct tsproc * tsproc; /* 1776 8 */
struct freq_estimator fest; /* 1784 24 */
/* --- cacheline 28 boundary (1792 bytes) was 16 bytes ago --- */
struct time_status_np status; /* 1808 50 */
/* XXX 6 bytes hole, try to pack */
/* --- cacheline 29 boundary (1856 bytes) was 8 bytes ago --- */
double master_local_rr; /* 1864 8 */
double nrr; /* 1872 8 */
struct clock_description desc; /* 1880 796 */
/* XXX last struct has 1 byte of padding */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 41 boundary (2624 bytes) was 56 bytes ago --- */
struct clock_stats stats; /* 2680 32 */
/* XXX last struct has 4 bytes of padding */
/* --- cacheline 42 boundary (2688 bytes) was 24 bytes ago --- */
int stats_interval; /* 2712 4 */
/* XXX 4 bytes hole, try to pack */
struct clockcheck * sanity_check; /* 2720 8 */
struct interface * uds_rw_if; /* 2728 8 */
struct interface * uds_ro_if; /* 2736 8 */
struct clock_subscribers_head subscribers; /* 2744 8 */
/* --- cacheline 43 boundary (2752 bytes) --- */
struct monitor * slave_event_monitor; /* 2752 8 */
int step_window_counter; /* 2760 4 */
int step_window; /* 2764 4 */
struct time_zone tz[4]; /* 2768 1136 */
/* size: 3904, cachelines: 61, members: 58 */
/* sum members: 3864, holes: 10, sum holes: 40 */
/* paddings: 3, sum paddings: 9 */
};
struct timeval {
__time_t tv_sec; /* 0 8 */
__suseconds_t tv_usec; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct timex {
unsigned int modes; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
__syscall_slong_t offset; /* 8 8 */
__syscall_slong_t freq; /* 16 8 */
__syscall_slong_t maxerror; /* 24 8 */
__syscall_slong_t esterror; /* 32 8 */
int status; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
__syscall_slong_t constant; /* 48 8 */
__syscall_slong_t precision; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
__syscall_slong_t tolerance; /* 64 8 */
struct timeval time; /* 72 16 */
__syscall_slong_t tick; /* 88 8 */
__syscall_slong_t ppsfreq; /* 96 8 */
__syscall_slong_t jitter; /* 104 8 */
int shift; /* 112 4 */
/* XXX 4 bytes hole, try to pack */
__syscall_slong_t stabil; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
__syscall_slong_t jitcnt; /* 128 8 */
__syscall_slong_t calcnt; /* 136 8 */
__syscall_slong_t errcnt; /* 144 8 */
__syscall_slong_t stbcnt; /* 152 8 */
int tai; /* 160 4 */
/* Force padding: */
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
int :32;
/* size: 208, cachelines: 4, members: 20 */
/* sum members: 152, holes: 3, sum holes: 12 */
/* padding: 44 */
/* last cacheline: 16 bytes */
};
struct clockcheck {
int freq_limit; /* 0 4 */
int freq_known; /* 4 4 */
int current_freq; /* 8 4 */
int max_freq; /* 12 4 */
int min_freq; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
uint64_t last_ts; /* 24 8 */
uint64_t last_mono_ts; /* 32 8 */
/* size: 40, cachelines: 1, members: 7 */
/* sum members: 36, holes: 1, sum holes: 4 */
/* last cacheline: 40 bytes */
};
struct config_enum {
const char * label; /* 0 8 */
int value; /* 8 4 */
/* size: 16, cachelines: 1, members: 2 */
/* padding: 4 */
/* last cacheline: 16 bytes */
};
struct config_item {
char label[64]; /* 0 64 */
/* --- cacheline 1 boundary (64 bytes) --- */
enum config_type type; /* 64 4 */
/* XXX 4 bytes hole, try to pack */
struct config_enum * tab; /* 72 8 */
unsigned int flags; /* 80 4 */
/* XXX 4 bytes hole, try to pack */
any_t val; /* 88 8 */
any_t min; /* 96 8 */
any_t max; /* 104 8 */
/* size: 112, cachelines: 2, members: 7 */
/* sum members: 104, holes: 2, sum holes: 8 */
/* last cacheline: 48 bytes */
};
struct PortStats {
uint64_t rxMsgType[16]; /* 0 128 */
/* --- cacheline 2 boundary (128 bytes) --- */
uint64_t txMsgType[16]; /* 128 128 */
/* size: 256, cachelines: 4, members: 2 */
};
struct PortServiceStats {
uint64_t announce_timeout; /* 0 8 */
uint64_t sync_timeout; /* 8 8 */
uint64_t delay_timeout; /* 16 8 */
uint64_t unicast_service_timeout; /* 24 8 */
uint64_t unicast_request_timeout; /* 32 8 */
uint64_t master_announce_timeout; /* 40 8 */
uint64_t master_sync_timeout; /* 48 8 */
uint64_t qualification_timeout; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
uint64_t sync_mismatch; /* 64 8 */
uint64_t followup_mismatch; /* 72 8 */
/* size: 80, cachelines: 2, members: 10 */
/* last cacheline: 16 bytes */
};
struct port {
struct {
struct port * le_next; /* 0 8 */
struct port * * le_prev; /* 8 8 */
} list; /* 0 16 */
const char * name; /* 16 8 */
char * log_name; /* 24 8 */
struct interface * iface; /* 32 8 */
struct clock * clock; /* 40 8 */
struct transport * trp; /* 48 8 */
enum timestamp_type timestamping; /* 56 4 */
struct fdarray fda; /* 60 44 */
/* --- cacheline 1 boundary (64 bytes) was 40 bytes ago --- */
int fault_fd; /* 104 4 */
int phc_index; /* 108 4 */
int phc_from_cmdline; /* 112 4 */
/* XXX 4 bytes hole, try to pack */
void (*dispatch)(struct port *, enum fsm_event, int); /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
enum fsm_event (*event)(struct port *, int); /* 128 8 */
int jbod; /* 136 4 */
/* XXX 4 bytes hole, try to pack */
struct foreign_clock * best; /* 144 8 */
enum syfu_state syfu; /* 152 4 */
/* XXX 4 bytes hole, try to pack */
struct ptp_message * last_syncfup; /* 160 8 */
struct delay_req delay_req; /* 168 16 */
struct ptp_message * peer_delay_req; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
struct ptp_message * peer_delay_resp; /* 192 8 */
struct ptp_message * peer_delay_fup; /* 200 8 */
int peer_portid_valid; /* 208 4 */
struct PortIdentity peer_portid; /* 212 10 */
struct {
UInteger16 announce; /* 222 2 */
UInteger16 delayreq; /* 224 2 */
UInteger16 signaling; /* 226 2 */
UInteger16 sync; /* 228 2 */
} seqnum; /* 222 8 */
/* XXX 2 bytes hole, try to pack */
tmv_t peer_delay; /* 232 8 */
struct tsproc * tsproc; /* 240 8 */
int log_sync_interval; /* 248 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 4 boundary (256 bytes) --- */
struct nrate_estimator nrate; /* 256 40 */
/* XXX last struct has 4 bytes of padding */
unsigned int pdr_missing; /* 296 4 */
unsigned int multiple_seq_pdr_count; /* 300 4 */
unsigned int multiple_pdr_detected; /* 304 4 */
/* XXX 4 bytes hole, try to pack */
enum port_state (*state_machine)(enum port_state, enum fsm_event, int); /* 312 8 */
/* --- cacheline 5 boundary (320 bytes) --- */
int bmca; /* 320 4 */
int inhibit_announce; /* 324 4 */
int ignore_source_id; /* 328 4 */
int inhibit_delay_req; /* 332 4 */
struct PortIdentity portIdentity; /* 336 10 */
/* XXX 2 bytes hole, try to pack */
enum port_state state; /* 348 4 */
Integer64 asymmetry; /* 352 8 */
enum as_capable asCapable; /* 360 4 */
Integer8 logMinDelayReqInterval; /* 364 1 */
/* XXX 3 bytes hole, try to pack */
TimeInterval peerMeanPathDelay; /* 368 8 */
Integer8 initialLogAnnounceInterval; /* 376 1 */
Integer8 logAnnounceInterval; /* 377 1 */
UInteger8 announceReceiptTimeout; /* 378 1 */
/* XXX 1 byte hole, try to pack */
int announce_span; /* 380 4 */
/* --- cacheline 6 boundary (384 bytes) --- */
UInteger8 syncReceiptTimeout; /* 384 1 */
UInteger8 transportSpecific; /* 385 1 */
UInteger8 localPriority; /* 386 1 */
Integer8 initialLogSyncInterval; /* 387 1 */
Integer8 operLogSyncInterval; /* 388 1 */
Integer8 logSyncInterval; /* 389 1 */
Enumeration8 delayMechanism; /* 390 1 */
Integer8 logMinPdelayReqInterval; /* 391 1 */
Integer8 operLogPdelayReqInterval; /* 392 1 */
Integer8 logPdelayReqInterval; /* 393 1 */
/* XXX 2 bytes hole, try to pack */
UInteger32 neighborPropDelayThresh; /* 396 4 */
int follow_up_info; /* 400 4 */
int freq_est_interval; /* 404 4 */
int hybrid_e2e; /* 408 4 */
int master_only; /* 412 4 */
int match_transport_specific; /* 416 4 */
int msg_interval_request; /* 420 4 */
int min_neighbor_prop_delay; /* 424 4 */
int net_sync_monitor; /* 428 4 */
int path_trace_enabled; /* 432 4 */
int tc_spanning_tree; /* 436 4 */
Integer64 rx_timestamp_offset; /* 440 8 */
/* --- cacheline 7 boundary (448 bytes) --- */
Integer64 tx_timestamp_offset; /* 448 8 */
int unicast_req_duration; /* 456 4 */
enum link_state link_status; /* 460 4 */
struct fault_interval flt_interval_pertype[3]; /* 464 24 */
enum fault_type last_fault_type; /* 488 4 */
UInteger8 versionNumber; /* 492 1 */
UInteger8 delay_response_counter; /* 493 1 */
UInteger8 delay_response_timeout; /* 494 1 */
_Bool iface_rate_tlv; /* 495 1 */
Integer64 portAsymmetry; /* 496 8 */
struct PortStats stats; /* 504 256 */
/* --- cacheline 11 boundary (704 bytes) was 56 bytes ago --- */
struct PortServiceStats service_stats; /* 760 80 */
/* --- cacheline 13 boundary (832 bytes) was 8 bytes ago --- */
struct fm foreign_masters; /* 840 8 */
struct tct tc_transmitted; /* 848 16 */
struct ieee_c37_238_settings_np pwr; /* 864 16 */
struct unicast_master_table * unicast_master_table; /* 880 8 */
struct unicast_service * unicast_service; /* 888 8 */
/* --- cacheline 14 boundary (896 bytes) --- */
int inhibit_multicast_service; /* 896 4 */
/* XXX 4 bytes hole, try to pack */
struct monitor * slave_event_monitor; /* 904 8 */
_Bool unicast_state_dirty; /* 912 1 */
/* size: 920, cachelines: 15, members: 88 */
/* sum members: 879, holes: 11, sum holes: 34 */
/* padding: 7 */
/* paddings: 1, sum paddings: 4 */
/* last cacheline: 24 bytes */
};
struct ieee_c37_238_settings_np {
Enumeration16 version; /* 0 2 */
UInteger16 grandmasterID; /* 2 2 */
UInteger32 grandmasterTimeInaccuracy; /* 4 4 */
UInteger32 networkTimeInaccuracy; /* 8 4 */
UInteger32 totalTimeInaccuracy; /* 12 4 */
/* size: 16, cachelines: 1, members: 5 */
/* last cacheline: 16 bytes */
};
struct nrate_estimator {
double ratio; /* 0 8 */
tmv_t origin1; /* 8 8 */
tmv_t ingress1; /* 16 8 */
unsigned int max_count; /* 24 4 */
unsigned int count; /* 28 4 */
int ratio_valid; /* 32 4 */
/* size: 40, cachelines: 1, members: 6 */
/* padding: 4 */
/* last cacheline: 40 bytes */
};
struct tc_txd {
struct {
struct tc_txd * tqe_next; /* 0 8 */
struct tc_txd * * tqe_prev; /* 8 8 */
} list; /* 0 16 */
struct ptp_message * msg; /* 16 8 */
tmv_t residence; /* 24 8 */
int ingress_port; /* 32 4 */
/* size: 40, cachelines: 1, members: 4 */
/* padding: 4 */
/* last cacheline: 40 bytes */
};
struct delay_req {
struct ptp_message * tqh_first; /* 0 8 */
struct ptp_message * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct fm {
struct foreign_clock * lh_first; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct tct {
struct tc_txd * tqh_first; /* 0 8 */
struct tc_txd * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct filter {
void (*destroy)(struct filter *); /* 0 8 */
tmv_t (*sample)(struct filter *, tmv_t); /* 8 8 */
void (*reset)(struct filter *); /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* last cacheline: 24 bytes */
};
struct mave {
struct filter filter; /* 0 24 */
int cnt; /* 24 4 */
int len; /* 28 4 */
int index; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
tmv_t sum; /* 40 8 */
tmv_t * val; /* 48 8 */
/* size: 56, cachelines: 1, members: 6 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct mmedian {
struct filter filter; /* 0 24 */
int cnt; /* 24 4 */
int len; /* 28 4 */
int index; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
int * order; /* 40 8 */
tmv_t * samples; /* 48 8 */
/* size: 56, cachelines: 1, members: 6 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct node {
char * key; /* 0 8 */
void * data; /* 8 8 */
struct node * next; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* last cacheline: 24 bytes */
};
struct hash {
struct node * table[200]; /* 0 1600 */
/* size: 1600, cachelines: 25, members: 1 */
};
struct sk_ts_info {
int valid; /* 0 4 */
int phc_index; /* 4 4 */
unsigned int so_timestamping; /* 8 4 */
unsigned int tx_types; /* 12 4 */
unsigned int rx_filters; /* 16 4 */
/* size: 20, cachelines: 1, members: 5 */
/* last cacheline: 20 bytes */
};
struct sk_if_info {
_Bool valid; /* 0 1 */
/* XXX 3 bytes hole, try to pack */
uint32_t speed; /* 4 4 */
uint64_t iface_bit_period; /* 8 8 */
/* size: 16, cachelines: 1, members: 3 */
/* sum members: 13, holes: 1, sum holes: 3 */
/* last cacheline: 16 bytes */
};
struct interface {
struct {
struct interface * stqe_next; /* 0 8 */
} list; /* 0 8 */
char name[109]; /* 8 109 */
/* --- cacheline 1 boundary (64 bytes) was 53 bytes ago --- */
char ts_label[109]; /* 117 109 */
/* XXX 2 bytes hole, try to pack */
/* --- cacheline 3 boundary (192 bytes) was 36 bytes ago --- */
struct sk_ts_info ts_info; /* 228 20 */
struct sk_if_info if_info; /* 248 16 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
int vclock; /* 264 4 */
/* size: 272, cachelines: 5, members: 6 */
/* sum members: 266, holes: 1, sum holes: 2 */
/* padding: 4 */
/* last cacheline: 16 bytes */
};
struct slave_delay_timing_record {
UInteger16 sequenceId; /* 0 2 */
struct Timestamp delayOriginTimestamp; /* 2 10 */
TimeInterval totalCorrectionField; /* 12 8 */
struct Timestamp delayResponseTimestamp; /* 20 10 */
/* size: 30, cachelines: 1, members: 4 */
/* last cacheline: 30 bytes */
} __attribute__((__packed__));
struct slave_delay_timing_data_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
struct PortIdentity sourcePortIdentity; /* 4 10 */
struct slave_delay_timing_record record[]; /* 14 0 */
/* size: 14, cachelines: 1, members: 4 */
/* last cacheline: 14 bytes */
} __attribute__((__packed__));
struct slave_rx_sync_timing_record {
UInteger16 sequenceId; /* 0 2 */
struct Timestamp syncOriginTimestamp; /* 2 10 */
TimeInterval totalCorrectionField; /* 12 8 */
Integer32 scaledCumulativeRateOffset; /* 20 4 */
struct Timestamp syncEventIngressTimestamp; /* 24 10 */
/* size: 34, cachelines: 1, members: 5 */
/* last cacheline: 34 bytes */
} __attribute__((__packed__));
struct slave_rx_sync_timing_data_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
struct PortIdentity sourcePortIdentity; /* 4 10 */
struct slave_rx_sync_timing_record record[]; /* 14 0 */
/* size: 14, cachelines: 1, members: 4 */
/* last cacheline: 14 bytes */
} __attribute__((__packed__));
struct monitor_message {
struct ptp_message * msg; /* 0 8 */
int records_per_msg; /* 8 4 */
int count; /* 12 4 */
/* size: 16, cachelines: 1, members: 3 */
/* last cacheline: 16 bytes */
};
struct monitor {
struct port * dst_port; /* 0 8 */
struct slave_rx_sync_timing_data_tlv * sync_tlv; /* 8 8 */
struct slave_delay_timing_data_tlv * delay_tlv; /* 16 8 */
struct monitor_message delay; /* 24 16 */
struct monitor_message sync; /* 40 16 */
/* size: 56, cachelines: 1, members: 5 */
/* last cacheline: 56 bytes */
};
struct message_storage {
unsigned char reserved[24]; /* 0 24 */
struct ptp_message msg __attribute__((__aligned__(8))); /* 24 1736 */
/* size: 1760, cachelines: 28, members: 2 */
/* forced alignments: 1 */
/* last cacheline: 32 bytes */
} __attribute__((__aligned__(8)));
struct msg_pool {
struct ptp_message * tqh_first; /* 0 8 */
struct ptp_message * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct ptp_clock_caps {
int max_adj; /* 0 4 */
int n_alarm; /* 4 4 */
int n_ext_ts; /* 8 4 */
int n_per_out; /* 12 4 */
int pps; /* 16 4 */
int n_pins; /* 20 4 */
int cross_timestamping; /* 24 4 */
int adjust_phase; /* 28 4 */
int max_phase_adj; /* 32 4 */
int rsv[11]; /* 36 44 */
/* size: 80, cachelines: 2, members: 10 */
/* last cacheline: 16 bytes */
};
struct ptp_pin_desc {
char name[64]; /* 0 64 */
/* --- cacheline 1 boundary (64 bytes) --- */
unsigned int index; /* 64 4 */
unsigned int func; /* 68 4 */
unsigned int chan; /* 72 4 */
unsigned int rsv[5]; /* 76 20 */
/* size: 96, cachelines: 2, members: 5 */
/* last cacheline: 32 bytes */
};
struct unicast_master_entry {
struct PortIdentity port_identity; /* 0 10 */
struct ClockQuality clock_quality; /* 10 4 */
uint8_t selected; /* 14 1 */
Enumeration8 port_state; /* 15 1 */
UInteger8 priority1; /* 16 1 */
UInteger8 priority2; /* 17 1 */
struct PortAddress address; /* 18 4 */
/* size: 22, cachelines: 1, members: 7 */
/* last cacheline: 22 bytes */
};
struct itimerspec {
struct timespec it_interval; /* 0 16 */
struct timespec it_value; /* 16 16 */
/* size: 32, cachelines: 1, members: 2 */
/* last cacheline: 32 bytes */
};
struct portDS {
struct PortIdentity portIdentity; /* 0 10 */
Enumeration8 portState; /* 10 1 */
Integer8 logMinDelayReqInterval; /* 11 1 */
TimeInterval peerMeanPathDelay; /* 12 8 */
Integer8 logAnnounceInterval; /* 20 1 */
UInteger8 announceReceiptTimeout; /* 21 1 */
Integer8 logSyncInterval; /* 22 1 */
Enumeration8 delayMechanism; /* 23 1 */
Integer8 logMinPdelayReqInterval; /* 24 1 */
UInteger8 versionNumber; /* 25 1 */
/* size: 26, cachelines: 1, members: 10 */
/* last cacheline: 26 bytes */
} __attribute__((__packed__));
struct management_error_status {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Enumeration16 error; /* 4 2 */
Enumeration16 id; /* 6 2 */
Octet reserved[4]; /* 8 4 */
Octet data[]; /* 12 0 */
/* size: 12, cachelines: 1, members: 6 */
/* last cacheline: 12 bytes */
};
struct nsm_resp_tlv_head {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
uint8_t port_state; /* 4 1 */
uint8_t reserved; /* 5 1 */
struct PortAddress parent_addr; /* 6 4 */
/* size: 10, cachelines: 1, members: 5 */
/* last cacheline: 10 bytes */
};
struct path_trace_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
struct ClockIdentity cid[]; /* 4 0 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct ieee_c37_238_2011_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
UInteger16 grandmasterID; /* 10 2 */
UInteger32 grandmasterTimeInaccuracy; /* 12 4 */
UInteger32 networkTimeInaccuracy; /* 16 4 */
Octet pad[2]; /* 20 2 */
/* size: 22, cachelines: 1, members: 8 */
/* last cacheline: 22 bytes */
} __attribute__((__packed__));
struct ieee_c37_238_2017_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
UInteger16 grandmasterID; /* 10 2 */
UInteger32 reserved1; /* 12 4 */
UInteger32 totalTimeInaccuracy; /* 16 4 */
Octet pad[2]; /* 20 2 */
/* size: 22, cachelines: 1, members: 8 */
/* last cacheline: 22 bytes */
} __attribute__((__packed__));
struct port_ds_np {
UInteger32 neighborPropDelayThresh; /* 0 4 */
Integer32 asCapable; /* 4 4 */
/* size: 8, cachelines: 1, members: 2 */
/* last cacheline: 8 bytes */
};
struct port_properties_np {
struct PortIdentity portIdentity; /* 0 10 */
uint8_t port_state; /* 10 1 */
uint8_t timestamping; /* 11 1 */
struct PTPText interface; /* 12 1 */
/* size: 13, cachelines: 1, members: 4 */
/* last cacheline: 13 bytes */
} __attribute__((__packed__));
struct port_hwclock_np {
struct PortIdentity portIdentity; /* 0 10 */
Integer32 phc_index; /* 10 4 */
UInteger8 flags; /* 14 1 */
uint8_t reserved; /* 15 1 */
/* size: 16, cachelines: 1, members: 4 */
/* last cacheline: 16 bytes */
} __attribute__((__packed__));
struct port_stats_np {
struct PortIdentity portIdentity; /* 0 10 */
struct PortStats stats; /* 10 256 */
/* size: 266, cachelines: 5, members: 2 */
/* last cacheline: 10 bytes */
} __attribute__((__packed__));
struct port_service_stats_np {
struct PortIdentity portIdentity; /* 0 10 */
struct PortServiceStats stats; /* 10 80 */
/* size: 90, cachelines: 2, members: 2 */
/* last cacheline: 26 bytes */
} __attribute__((__packed__));
struct unicast_master_table_np {
uint16_t actual_table_size; /* 0 2 */
struct unicast_master_entry unicast_masters[]; /* 2 0 */
/* size: 2, cachelines: 1, members: 2 */
/* last cacheline: 2 bytes */
};
struct organization_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
/* size: 10, cachelines: 1, members: 4 */
/* last cacheline: 10 bytes */
};
struct msg_interval_req_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
Integer8 linkDelayInterval; /* 10 1 */
Integer8 timeSyncInterval; /* 11 1 */
Integer8 announceInterval; /* 12 1 */
Octet flags; /* 13 1 */
Octet reserved[2]; /* 14 2 */
/* size: 16, cachelines: 1, members: 9 */
/* last cacheline: 16 bytes */
};
struct msg_interface_rate_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
Octet id[3]; /* 4 3 */
Octet subtype[3]; /* 7 3 */
UInteger64 interfaceBitPeriod; /* 10 8 */
UInteger16 numberOfBitsBeforeTimestamp; /* 18 2 */
UInteger16 numberOfBitsAfterTimestamp; /* 20 2 */
/* size: 22, cachelines: 1, members: 7 */
/* last cacheline: 22 bytes */
} __attribute__((__packed__));
struct pqueue {
int len; /* 0 4 */
int max; /* 4 4 */
int (*cmp)(void *, void *); /* 8 8 */
void * * data; /* 16 8 */
/* size: 24, cachelines: 1, members: 4 */
/* last cacheline: 24 bytes */
};
struct __va_list {
void * __stack; /* 0 8 */
void * __gr_top; /* 8 8 */
void * __vr_top; /* 16 8 */
int __gr_offs; /* 24 4 */
int __vr_offs; /* 28 4 */
/* size: 32, cachelines: 1, members: 5 */
/* last cacheline: 32 bytes */
};
struct iovec {
void * iov_base; /* 0 8 */
size_t iov_len; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct msghdr {
void * msg_name; /* 0 8 */
socklen_t msg_namelen; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
struct iovec * msg_iov; /* 16 8 */
size_t msg_iovlen; /* 24 8 */
void * msg_control; /* 32 8 */
size_t msg_controllen; /* 40 8 */
int msg_flags; /* 48 4 */
/* size: 56, cachelines: 1, members: 7 */
/* sum members: 48, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 56 bytes */
};
struct sockaddr_nl {
__kernel_sa_family_t nl_family; /* 0 2 */
short unsigned int nl_pad; /* 2 2 */
__u32 nl_pid; /* 4 4 */
__u32 nl_groups; /* 8 4 */
/* size: 12, cachelines: 1, members: 4 */
/* last cacheline: 12 bytes */
};
struct nlmsghdr {
__u32 nlmsg_len; /* 0 4 */
__u16 nlmsg_type; /* 4 2 */
__u16 nlmsg_flags; /* 6 2 */
__u32 nlmsg_seq; /* 8 4 */
__u32 nlmsg_pid; /* 12 4 */
/* size: 16, cachelines: 1, members: 5 */
/* last cacheline: 16 bytes */
};
struct nlattr {
__u16 nla_len; /* 0 2 */
__u16 nla_type; /* 2 2 */
/* size: 4, cachelines: 1, members: 2 */
/* last cacheline: 4 bytes */
};
struct rtattr {
short unsigned int rta_len; /* 0 2 */
short unsigned int rta_type; /* 2 2 */
/* size: 4, cachelines: 1, members: 2 */
/* last cacheline: 4 bytes */
};
struct ifinfomsg {
unsigned char ifi_family; /* 0 1 */
unsigned char __ifi_pad; /* 1 1 */
short unsigned int ifi_type; /* 2 2 */
int ifi_index; /* 4 4 */
unsigned int ifi_flags; /* 8 4 */
unsigned int ifi_change; /* 12 4 */
/* size: 16, cachelines: 1, members: 6 */
/* last cacheline: 16 bytes */
};
struct genlmsghdr {
__u8 cmd; /* 0 1 */
__u8 version; /* 1 1 */
__u16 reserved; /* 2 2 */
/* size: 4, cachelines: 1, members: 3 */
/* last cacheline: 4 bytes */
};
struct servo {
double max_frequency; /* 0 8 */
double step_threshold; /* 8 8 */
double first_step_threshold; /* 16 8 */
int first_update; /* 24 4 */
/* XXX 4 bytes hole, try to pack */
int64_t offset_threshold; /* 32 8 */
int num_offset_values; /* 40 4 */
int curr_offset_values; /* 44 4 */
void (*destroy)(struct servo *); /* 48 8 */
double (*sample)(struct servo *, int64_t, uint64_t, double, enum servo_state *); /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
void (*sync_interval)(struct servo *, double); /* 64 8 */
void (*reset)(struct servo *); /* 72 8 */
double (*rate_ratio)(struct servo *); /* 80 8 */
void (*leap)(struct servo *, int); /* 88 8 */
/* size: 96, cachelines: 2, members: 13 */
/* sum members: 92, holes: 1, sum holes: 4 */
/* last cacheline: 32 bytes */
};
struct point {
uint64_t x; /* 0 8 */
uint64_t y; /* 8 8 */
double w; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* last cacheline: 24 bytes */
};
struct result {
double slope; /* 0 8 */
double intercept; /* 8 8 */
double err; /* 16 8 */
int err_updates; /* 24 4 */
/* size: 32, cachelines: 1, members: 4 */
/* padding: 4 */
/* last cacheline: 32 bytes */
};
struct linreg_servo {
struct servo servo; /* 0 96 */
/* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */
struct point points[64]; /* 96 1536 */
/* --- cacheline 25 boundary (1600 bytes) was 32 bytes ago --- */
struct point reference; /* 1632 24 */
unsigned int num_points; /* 1656 4 */
unsigned int last_point; /* 1660 4 */
/* --- cacheline 26 boundary (1664 bytes) --- */
double x_remainder; /* 1664 8 */
uint64_t last_update; /* 1672 8 */
struct result results[5]; /* 1680 160 */
/* --- cacheline 28 boundary (1792 bytes) was 48 bytes ago --- */
unsigned int size; /* 1840 4 */
/* XXX 4 bytes hole, try to pack */
double clock_freq; /* 1848 8 */
/* --- cacheline 29 boundary (1856 bytes) --- */
double update_interval; /* 1856 8 */
double frequency_ratio; /* 1864 8 */
int leap; /* 1872 4 */
/* size: 1880, cachelines: 30, members: 13 */
/* sum members: 1872, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 24 bytes */
};
struct shmTime {
int mode; /* 0 4 */
volatile int count; /* 4 4 */
time_t clockTimeStampSec; /* 8 8 */
int clockTimeStampUSec; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
time_t receiveTimeStampSec; /* 24 8 */
int receiveTimeStampUSec; /* 32 4 */
int leap; /* 36 4 */
int precision; /* 40 4 */
int nsamples; /* 44 4 */
volatile int valid; /* 48 4 */
int clockTimeStampNSec; /* 52 4 */
int receiveTimeStampNSec; /* 56 4 */
int dummy[8]; /* 60 32 */
/* size: 96, cachelines: 2, members: 13 */
/* sum members: 88, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 32 bytes */
};
struct ntpshm_servo {
struct servo servo; /* 0 96 */
/* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */
struct shmTime * shm; /* 96 8 */
int leap; /* 104 4 */
/* size: 112, cachelines: 2, members: 3 */
/* padding: 4 */
/* last cacheline: 48 bytes */
};
struct nullf_servo {
struct servo servo; /* 0 96 */
/* size: 96, cachelines: 2, members: 1 */
/* last cacheline: 32 bytes */
};
struct pi_servo {
struct servo servo; /* 0 96 */
/* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */
int64_t offset[2]; /* 96 16 */
uint64_t local[2]; /* 112 16 */
/* --- cacheline 2 boundary (128 bytes) --- */
double drift; /* 128 8 */
double kp; /* 136 8 */
double ki; /* 144 8 */
double last_freq; /* 152 8 */
int count; /* 160 4 */
/* XXX 4 bytes hole, try to pack */
double configured_pi_kp; /* 168 8 */
double configured_pi_ki; /* 176 8 */
double configured_pi_kp_scale; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
double configured_pi_kp_exponent; /* 192 8 */
double configured_pi_kp_norm_max; /* 200 8 */
double configured_pi_ki_scale; /* 208 8 */
double configured_pi_ki_exponent; /* 216 8 */
double configured_pi_ki_norm_max; /* 224 8 */
/* size: 232, cachelines: 4, members: 16 */
/* sum members: 228, holes: 1, sum holes: 4 */
/* last cacheline: 40 bytes */
};
struct sock_sample {
struct timeval tv; /* 0 16 */
double offset; /* 16 8 */
int pulse; /* 24 4 */
int leap; /* 28 4 */
int _pad; /* 32 4 */
int magic; /* 36 4 */
/* size: 40, cachelines: 1, members: 6 */
/* last cacheline: 40 bytes */
};
struct sock_servo {
struct servo servo; /* 0 96 */
/* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */
int sock_fd; /* 96 4 */
int leap; /* 100 4 */
/* size: 104, cachelines: 2, members: 3 */
/* last cacheline: 40 bytes */
};
struct so_timestamping {
int flags; /* 0 4 */
int bind_phc; /* 4 4 */
/* size: 8, cachelines: 1, members: 2 */
/* last cacheline: 8 bytes */
};
struct hwtstamp_config {
int flags; /* 0 4 */
int tx_type; /* 4 4 */
int rx_filter; /* 8 4 */
/* size: 12, cachelines: 1, members: 3 */
/* last cacheline: 12 bytes */
};
struct ethtool_ts_info {
__u32 cmd; /* 0 4 */
__u32 so_timestamping; /* 4 4 */
__s32 phc_index; /* 8 4 */
__u32 tx_types; /* 12 4 */
__u32 tx_reserved[3]; /* 16 12 */
__u32 rx_filters; /* 28 4 */
__u32 rx_reserved[3]; /* 32 12 */
/* size: 44, cachelines: 1, members: 7 */
/* last cacheline: 44 bytes */
};
struct ethtool_link_settings {
__u32 cmd; /* 0 4 */
__u32 speed; /* 4 4 */
__u8 duplex; /* 8 1 */
__u8 port; /* 9 1 */
__u8 phy_address; /* 10 1 */
__u8 autoneg; /* 11 1 */
__u8 mdio_support; /* 12 1 */
__u8 eth_tp_mdix; /* 13 1 */
__u8 eth_tp_mdix_ctrl; /* 14 1 */
__s8 link_mode_masks_nwords; /* 15 1 */
__u8 transceiver; /* 16 1 */
__u8 master_slave_cfg; /* 17 1 */
__u8 master_slave_state; /* 18 1 */
__u8 rate_matching; /* 19 1 */
__u32 reserved[7]; /* 20 28 */
__u32 link_mode_masks[]; /* 48 0 */
/* size: 48, cachelines: 1, members: 16 */
/* last cacheline: 48 bytes */
};
struct cmsghdr {
size_t cmsg_len; /* 0 8 */
int cmsg_level; /* 8 4 */
int cmsg_type; /* 12 4 */
unsigned char __cmsg_data[]; /* 16 0 */
/* size: 16, cachelines: 1, members: 4 */
/* last cacheline: 16 bytes */
};
struct ifmap {
long unsigned int mem_start; /* 0 8 */
long unsigned int mem_end; /* 8 8 */
short unsigned int base_addr; /* 16 2 */
unsigned char irq; /* 18 1 */
unsigned char dma; /* 19 1 */
unsigned char port; /* 20 1 */
/* size: 24, cachelines: 1, members: 6 */
/* padding: 3 */
/* last cacheline: 24 bytes */
};
struct ifreq {
union {
char ifrn_name[16]; /* 0 16 */
} ifr_ifrn; /* 0 16 */
union {
struct sockaddr ifru_addr; /* 16 16 */
struct sockaddr ifru_dstaddr; /* 16 16 */
struct sockaddr ifru_broadaddr; /* 16 16 */
struct sockaddr ifru_netmask; /* 16 16 */
struct sockaddr ifru_hwaddr; /* 16 16 */
short int ifru_flags; /* 16 2 */
int ifru_ivalue; /* 16 4 */
int ifru_mtu; /* 16 4 */
struct ifmap ifru_map; /* 16 24 */
char ifru_slave[16]; /* 16 16 */
char ifru_newname[16]; /* 16 16 */
__caddr_t ifru_data; /* 16 8 */
} ifr_ifru; /* 16 24 */
/* size: 40, cachelines: 1, members: 2 */
/* last cacheline: 40 bytes */
};
struct ifaddrs {
struct ifaddrs * ifa_next; /* 0 8 */
char * ifa_name; /* 8 8 */
unsigned int ifa_flags; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
struct sockaddr * ifa_addr; /* 24 8 */
struct sockaddr * ifa_netmask; /* 32 8 */
union {
struct sockaddr * ifu_broadaddr; /* 40 8 */
struct sockaddr * ifu_dstaddr; /* 40 8 */
} ifa_ifu; /* 40 8 */
void * ifa_data; /* 48 8 */
/* size: 56, cachelines: 1, members: 7 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct stats {
unsigned int num; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
double min; /* 8 8 */
double max; /* 16 8 */
double mean; /* 24 8 */
double sum_sqr; /* 32 8 */
double sum_diff_sqr; /* 40 8 */
/* size: 48, cachelines: 1, members: 6 */
/* sum members: 44, holes: 1, sum holes: 4 */
/* last cacheline: 48 bytes */
};
struct tc_pool {
struct tc_txd * tqh_first; /* 0 8 */
struct tc_txd * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct sock_filter {
__u16 code; /* 0 2 */
__u8 jt; /* 2 1 */
__u8 jf; /* 3 1 */
__u32 k; /* 4 4 */
/* size: 8, cachelines: 1, members: 4 */
/* last cacheline: 8 bytes */
};
struct sock_fprog {
short unsigned int len; /* 0 2 */
/* XXX 6 bytes hole, try to pack */
struct sock_filter * filter; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* sum members: 10, holes: 1, sum holes: 6 */
/* last cacheline: 16 bytes */
};
struct packet_mreq {
int mr_ifindex; /* 0 4 */
short unsigned int mr_type; /* 4 2 */
short unsigned int mr_alen; /* 6 2 */
unsigned char mr_address[8]; /* 8 8 */
/* size: 16, cachelines: 1, members: 4 */
/* last cacheline: 16 bytes */
};
struct eth_hdr {
eth_addr dst; /* 0 6 */
eth_addr src; /* 6 6 */
uint16_t type; /* 12 2 */
/* size: 14, cachelines: 1, members: 3 */
/* last cacheline: 14 bytes */
};
struct transport {
enum transport_type type; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
struct config * cfg; /* 8 8 */
int (*close)(struct transport *, struct fdarray *); /* 16 8 */
int (*open)(struct transport *, struct interface *, struct fdarray *, enum timestamp_type); /* 24 8 */
int (*recv)(struct transport *, int, void *, int, struct address *, struct hw_timestamp *); /* 32 8 */
int (*send)(struct transport *, struct fdarray *, enum transport_event, int, void *, int, struct address *, struct hw_timestamp *); /* 40 8 */
void (*release)(struct transport *); /* 48 8 */
int (*physical_addr)(struct transport *, uint8_t *); /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
int (*protocol_addr)(struct transport *, uint8_t *); /* 64 8 */
/* size: 72, cachelines: 2, members: 9 */
/* sum members: 68, holes: 1, sum holes: 4 */
/* last cacheline: 8 bytes */
};
struct raw {
struct transport t; /* 0 72 */
/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
struct address src_addr; /* 72 136 */
/* --- cacheline 3 boundary (192 bytes) was 16 bytes ago --- */
struct address ptp_addr; /* 208 136 */
/* --- cacheline 5 boundary (320 bytes) was 24 bytes ago --- */
struct address p2p_addr; /* 344 136 */
/* --- cacheline 7 boundary (448 bytes) was 32 bytes ago --- */
int vlan; /* 480 4 */
/* size: 488, cachelines: 8, members: 5 */
/* padding: 4 */
/* last cacheline: 40 bytes */
};
struct ip_mreqn {
struct in_addr imr_multiaddr; /* 0 4 */
struct in_addr imr_address; /* 4 4 */
int imr_ifindex; /* 8 4 */
/* size: 12, cachelines: 1, members: 3 */
/* last cacheline: 12 bytes */
};
struct udp {
struct transport t; /* 0 72 */
/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
struct address ip; /* 72 136 */
/* --- cacheline 3 boundary (192 bytes) was 16 bytes ago --- */
struct address mac; /* 208 136 */
/* size: 344, cachelines: 6, members: 3 */
/* last cacheline: 24 bytes */
};
struct ipv6_mreq {
struct in6_addr ipv6mr_multiaddr; /* 0 16 */
unsigned int ipv6mr_interface; /* 16 4 */
/* size: 20, cachelines: 1, members: 2 */
/* last cacheline: 20 bytes */
};
struct udp6 {
struct transport t; /* 0 72 */
/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
int index; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
struct address ip; /* 80 136 */
/* --- cacheline 3 boundary (192 bytes) was 24 bytes ago --- */
struct address mac; /* 216 136 */
/* --- cacheline 5 boundary (320 bytes) was 32 bytes ago --- */
struct in6_addr mc6_addr[2]; /* 352 32 */
/* size: 384, cachelines: 6, members: 5 */
/* sum members: 380, holes: 1, sum holes: 4 */
};
struct uds {
struct transport t; /* 0 72 */
/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
struct address address; /* 72 136 */
/* size: 208, cachelines: 4, members: 2 */
/* last cacheline: 16 bytes */
};
struct ack_cancel_unicast_xmit_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
uint8_t message_type_flags; /* 4 1 */
uint8_t reserved; /* 5 1 */
/* size: 6, cachelines: 1, members: 4 */
/* last cacheline: 6 bytes */
};
struct cancel_unicast_xmit_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
uint8_t message_type_flags; /* 4 1 */
uint8_t reserved; /* 5 1 */
/* size: 6, cachelines: 1, members: 4 */
/* last cacheline: 6 bytes */
};
struct grant_unicast_xmit_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
uint8_t message_type; /* 4 1 */
Integer8 logInterMessagePeriod; /* 5 1 */
UInteger32 durationField; /* 6 4 */
uint8_t reserved; /* 10 1 */
uint8_t flags; /* 11 1 */
/* size: 12, cachelines: 1, members: 7 */
/* last cacheline: 12 bytes */
} __attribute__((__packed__));
struct request_unicast_xmit_tlv {
Enumeration16 type; /* 0 2 */
UInteger16 length; /* 2 2 */
uint8_t message_type; /* 4 1 */
Integer8 logInterMessagePeriod; /* 5 1 */
UInteger32 durationField; /* 6 4 */
/* size: 10, cachelines: 1, members: 5 */
/* last cacheline: 10 bytes */
} __attribute__((__packed__));
struct tlv_pool {
struct tlv_extra * tqh_first; /* 0 8 */
struct tlv_extra * * tqh_last; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct tsproc {
enum tsproc_mode mode; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
double clock_rate_ratio; /* 8 8 */
tmv_t t1; /* 16 8 */
tmv_t t2; /* 24 8 */
tmv_t t3; /* 32 8 */
tmv_t t4; /* 40 8 */
tmv_t filtered_delay; /* 48 8 */
int filtered_delay_valid; /* 56 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 1 boundary (64 bytes) --- */
struct filter * delay_filter; /* 64 8 */
/* size: 72, cachelines: 2, members: 9 */
/* sum members: 64, holes: 2, sum holes: 8 */
/* last cacheline: 8 bytes */
};
struct unicast_service {
struct usi intervals; /* 0 8 */
struct pqueue * queue; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* last cacheline: 16 bytes */
};
struct unicast_client_address {
struct {
struct unicast_client_address * le_next; /* 0 8 */
struct unicast_client_address * * le_prev; /* 8 8 */
} list; /* 0 16 */
struct PortIdentity portIdentity; /* 16 10 */
struct {
UInteger16 announce; /* 26 2 */
UInteger16 sync; /* 28 2 */
} seqnum; /* 26 4 */
/* XXX 2 bytes hole, try to pack */
unsigned int message_types; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
struct address addr; /* 40 136 */
/* --- cacheline 2 boundary (128 bytes) was 48 bytes ago --- */
time_t grant_tmo; /* 176 8 */
/* size: 184, cachelines: 3, members: 6 */
/* sum members: 178, holes: 2, sum holes: 6 */
/* last cacheline: 56 bytes */
};
struct uca {
struct unicast_client_address * lh_first; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
struct unicast_service_interval {
struct uca clients; /* 0 8 */
struct {
struct unicast_service_interval * le_next; /* 8 8 */
struct unicast_service_interval * * le_prev; /* 16 8 */
} list; /* 8 16 */
struct timespec incr; /* 24 16 */
struct timespec tmo; /* 40 16 */
int log_period; /* 56 4 */
/* size: 64, cachelines: 1, members: 5 */
/* padding: 4 */
};
struct usi {
struct unicast_service_interval * lh_first; /* 0 8 */
/* size: 8, cachelines: 1, members: 1 */
/* last cacheline: 8 bytes */
};
^ permalink raw reply [flat|nested] 7+ messages in thread