summaryrefslogtreecommitdiff
path: root/lib/common/avb_avtp.h
blob: 23ceab2bae1122658dd6956e8ed1a291a2553459 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef __AVB_AVTP_H__
#define __AVB_AVTP_H__

#include <inttypes.h>

#define MAX_SAMPLE_VALUE ((1U << ((sizeof(int32_t)*8)-1))-1)

#define IEEE_61883_IIDC_SUBTYPE 0x0

#define ETHER_TYPE_AVTP		0x22f0

#define ETH_ALEN   6 /* Size of Ethernet address */

typedef struct __attribute__ ((packed)) {
	/* Destination MAC address. */
	uint8_t h_dest [ETH_ALEN];
	/* Destination MAC address. */
	uint8_t h_source [ETH_ALEN];
	/* Protocol ID. */
	uint8_t h_protocol[2];
} eth_header;

typedef struct __attribute__ ((packed)) {
	uint64_t subtype:7;
	uint64_t cd_indicator:1;
	uint64_t timestamp_valid:1;
	uint64_t gateway_valid:1;
	uint64_t reserved0:1;
	uint64_t reset:1;
	uint64_t version:3;
	uint64_t sid_valid:1;
	uint64_t seq_number:8;
	uint64_t timestamp_uncertain:1;
	uint64_t reserved1:7;
	uint64_t stream_id;
	uint64_t timestamp:32;
	uint64_t gateway_info:32;
	uint64_t length:16;
} seventeen22_header;

/* 61883 CIP with SYT Field */
typedef struct {
	uint16_t packet_channel:6;
	uint16_t format_tag:2;
	uint16_t app_control:4;
	uint16_t packet_tcode:4;
	uint16_t source_id:6;
	uint16_t reserved0:2;
	uint16_t data_block_size:8;
	uint16_t reserved1:2;
	uint16_t source_packet_header:1;
	uint16_t quadlet_padding_count:3;
	uint16_t fraction_number:2;
	uint16_t data_block_continuity:8;
	uint16_t format_id:6;
	uint16_t eoh:2;
	uint16_t format_dependent_field:8;
	uint16_t syt;
} six1883_header;

typedef struct {
	uint8_t label;
	uint8_t value[3];
} six1883_sample;

void avb_set_1722_cd_indicator(seventeen22_header *h1722, uint64_t cd_indicator);
uint64_t avb_get_1722_cd_indicator(seventeen22_header *h1722);
void avb_set_1722_subtype(seventeen22_header *h1722, uint64_t subtype);
uint64_t avb_get_1722_subtype(seventeen22_header *h1722);
void avb_set_1722_sid_valid(seventeen22_header *h1722, uint64_t sid_valid);
uint64_t avb_get_1722_sid_valid(seventeen22_header *h1722);
void avb_set_1722_version(seventeen22_header *h1722, uint64_t version);
uint64_t avb_get_1722_version(seventeen22_header *h1722);
void avb_set_1722_reset(seventeen22_header *h1722, uint64_t reset);
uint64_t avb_get_1722_reset(seventeen22_header *h1722);
void avb_set_1722_reserved0(seventeen22_header *h1722, uint64_t reserved0);
uint64_t avb_get_1722_reserved0(seventeen22_header *h1722);
void avb_set_1722_reserved1(seventeen22_header *h1722, uint64_t reserved1);
uint64_t avb_get_1722_reserved1(seventeen22_header *h1722);
void avb_set_1722_timestamp_uncertain(seventeen22_header *h1722, uint64_t timestamp_uncertain);
uint64_t avb_get_1722_timestamp_uncertain(seventeen22_header *h1722);
void avb_set_1722_timestamp(seventeen22_header *h1722, uint64_t timestamp);
uint64_t avb_get_1722_reset(seventeen22_header *h1722);
void avb_set_1722_reserved0(seventeen22_header *h1722, uint64_t reserved0);
uint64_t avb_get_1722_reserved0(seventeen22_header *h1722);
void avb_set_1722_gateway_valid(seventeen22_header *h1722, uint64_t gateway_valid);
uint64_t avb_get_1722_gateway_valid(seventeen22_header *h1722);
void avb_set_1722_timestamp_valid(seventeen22_header *h1722, uint64_t timestamp_valid);
uint64_t avb_get_1722_timestamp_valid(seventeen22_header *h1722);
void avb_set_1722_reserved1(seventeen22_header *h1722, uint64_t reserved1);
uint64_t avb_get_1722_reserved1(seventeen22_header *h1722);
void avb_set_1722_timestamp_uncertain(seventeen22_header *h1722, uint64_t timestamp_uncertain);
uint64_t avb_get_1722_timestamp_uncertain(seventeen22_header *h1722);
void avb_set_1722_timestamp(seventeen22_header *h1722, uint64_t timestamp);
uint64_t avb_get_1722_timestamp(seventeen22_header *h1722);
void avb_set_1722_gateway_info(seventeen22_header *h1722, uint64_t gateway_info);
uint64_t avb_get_1722_gateway_info(seventeen22_header *h1722);
void avb_set_1722_length(seventeen22_header *h1722, uint64_t length);
uint64_t avb_get_1722_length(seventeen22_header *h1722);
void avb_set_1722_stream_id(seventeen22_header *h1722, uint64_t stream_id);
uint64_t avb_get_1722_stream_id(seventeen22_header *h1722);
void avb_set_1722_seq_number(seventeen22_header *h1722, uint64_t seq_number);
uint64_t avb_get_1722_seq_number(seventeen22_header *h1722);

void avb_set_61883_packet_channel(six1883_header *h61883, uint16_t packet_channel);
uint16_t avb_get_61883_length(six1883_header *h61883);
void avb_set_61883_format_tag(six1883_header *h61883, uint16_t format_tag);
uint16_t avb_get_61883_format_tag(six1883_header *h61883);
void avb_set_61883_app_control(six1883_header *h61883, uint16_t app_control);
uint16_t avb_get_61883_app_control(six1883_header *h61883);
void avb_set_61883_packet_tcode(six1883_header *h61883, uint16_t packet_tcode);
uint16_t avb_get_61883_packet_tcode(six1883_header *h61883);
void avb_set_61883_source_id(six1883_header *h61883, uint16_t source_id);
uint16_t avb_get_61883_source_id(six1883_header *h61883);
void avb_set_61883_reserved0(six1883_header *h61883, uint16_t reserved0);
uint16_t avb_get_61883_reserved0(six1883_header *h61883);
void avb_set_61883_data_block_size(six1883_header *h61883, uint16_t data_block_size);
uint16_t avb_get_61883_data_block_size(six1883_header *h61883);
void avb_set_61883_reserved1(six1883_header *h61883, uint16_t reserved1);
uint16_t avb_get_61883_reserved1(six1883_header *h61883);
void avb_set_61883_source_packet_header(six1883_header *h61883, uint16_t source_packet_header);
uint16_t avb_get_61883_source_packet_header(six1883_header *h61883);
void avb_set_61883_quadlet_padding_count(six1883_header *h61883, uint16_t quadlet_padding_count);
uint16_t avb_get_61883_quadlet_padding_count(six1883_header *h61883);
void avb_set_61883_fraction_number(six1883_header *h61883, uint16_t fraction_number);
uint16_t avb_get_61883_fraction_number(six1883_header *h61883);
void avb_set_61883_data_block_continuity(six1883_header *h61883, uint16_t data_block_continuity);
uint16_t avb_get_61883_data_block_continuity(six1883_header *h61883);
void avb_set_61883_format_id(six1883_header *h61883, uint16_t format_id);
uint16_t avb_get_61883_format_id(six1883_header *h61883);
void avb_set_61883_eoh(six1883_header *h61883, uint16_t eoh);
uint16_t avb_get_61883_eoh(six1883_header *h61883);
void avb_set_61883_format_dependent_field(six1883_header *h61883, uint16_t format_dependent_field);
uint16_t avb_get_61883_format_dependent_field(six1883_header *h61883);
void avb_set_61883_syt(six1883_header *h61883, uint16_t syt);
uint16_t avb_get_61883_syt(six1883_header *h61883);

void * avb_create_packet(uint32_t payload_len);

void avb_initialize_h1722_to_defaults(seventeen22_header *h1722);

void avb_initialize_61883_to_defaults(six1883_header *h61883);

int32_t avb_get_iface_mac_address(int8_t *iface, uint8_t *addr);

int32_t
avb_eth_header_set_mac(eth_header *ethernet_header, uint8_t *addr, int8_t *iface);

void avb_1722_set_eth_type(eth_header *eth_header);

#endif