@@ -63,16 +63,11 @@ static void csp_id1_prepend(csp_packet_t * packet, bool cspv1_fixup) {
6363 memcpy (packet -> frame_begin , & id1 , CSP_ID1_HEADER_SIZE );
6464}
6565
66- static int csp_id1_strip (csp_packet_t * packet , bool cspv1_fixup ) {
67-
68- if (packet -> frame_length < CSP_ID1_HEADER_SIZE ) {
69- return -1 ;
70- }
66+ static csp_id_t csp_id1_extract (const uint8_t * data , bool cspv1_fixup ) {
7167
7268 /* Get 32 bit in network byte order */
7369 uint32_t id1_raw = 0 ;
74- memcpy (& id1_raw , packet -> frame_begin , CSP_ID1_HEADER_SIZE );
75- packet -> length = packet -> frame_length - CSP_ID1_HEADER_SIZE ;
70+ memcpy (& id1_raw , data , CSP_ID1_HEADER_SIZE );
7671
7772 /* Convert to host order */
7873 uint32_t id1 = be32toh (id1_raw );
@@ -83,14 +78,15 @@ static int csp_id1_strip(csp_packet_t * packet, bool cspv1_fixup) {
8378
8479 /* Parse header:
8580 * Now in easy to work with in 32 bit register */
86- packet -> id .pri = (id1 >> CSP_ID1_PRIO_OFFSET ) & CSP_ID1_PRIO_MASK ;
87- packet -> id .dst = (id1 >> CSP_ID1_DST_OFFSET ) & CSP_ID1_DST_MASK ;
88- packet -> id .src = (id1 >> CSP_ID1_SRC_OFFSET ) & CSP_ID1_SRC_MASK ;
89- packet -> id .dport = (id1 >> CSP_ID1_DPORT_OFFSET ) & CSP_ID1_DPORT_MASK ;
90- packet -> id .sport = (id1 >> CSP_ID1_SPORT_OFFSET ) & CSP_ID1_SPORT_MASK ;
91- packet -> id .flags = (id1 >> CSP_ID1_FLAGS_OFFSET ) & CSP_ID1_FLAGS_MASK ;
92-
93- return 0 ;
81+ csp_id_t id ;
82+ id .pri = (id1 >> CSP_ID1_PRIO_OFFSET ) & CSP_ID1_PRIO_MASK ;
83+ id .dst = (id1 >> CSP_ID1_DST_OFFSET ) & CSP_ID1_DST_MASK ;
84+ id .src = (id1 >> CSP_ID1_SRC_OFFSET ) & CSP_ID1_SRC_MASK ;
85+ id .dport = (id1 >> CSP_ID1_DPORT_OFFSET ) & CSP_ID1_DPORT_MASK ;
86+ id .sport = (id1 >> CSP_ID1_SPORT_OFFSET ) & CSP_ID1_SPORT_MASK ;
87+ id .flags = (id1 >> CSP_ID1_FLAGS_OFFSET ) & CSP_ID1_FLAGS_MASK ;
88+
89+ return id ;
9490}
9591
9692static void csp_id1_setup_rx (csp_packet_t * packet ) {
@@ -147,17 +143,12 @@ static void csp_id2_prepend(csp_packet_t * packet) {
147143 memcpy (packet -> frame_begin , & id2 , CSP_ID2_HEADER_SIZE );
148144}
149145
150- static int csp_id2_strip (csp_packet_t * packet ) {
151-
152- if (packet -> frame_length < CSP_ID2_HEADER_SIZE ) {
153- return -1 ;
154- }
146+ static csp_id_t csp_id2_extract (const uint8_t * data ) {
155147
156148 /* Get 48 bit in network byte order:
157149 * Most significant byte ends in byte 0 */
158150 uint64_t id2 = 0 ;
159- memcpy (& id2 , packet -> frame_begin , CSP_ID2_HEADER_SIZE );
160- packet -> length = packet -> frame_length - CSP_ID2_HEADER_SIZE ;
151+ memcpy (& id2 , data , CSP_ID2_HEADER_SIZE );
161152
162153 /* Convert to host order:
163154 * Most significant byte ends in byte 7, we then shift down
@@ -166,14 +157,15 @@ static int csp_id2_strip(csp_packet_t * packet) {
166157
167158 /* Parse header:
168159 * Now in easy to work with in 32 bit register */
169- packet -> id .pri = (id2 >> CSP_ID2_PRIO_OFFSET ) & CSP_ID2_PRIO_MASK ;
170- packet -> id .dst = (id2 >> CSP_ID2_DST_OFFSET ) & CSP_ID2_DST_MASK ;
171- packet -> id .src = (id2 >> CSP_ID2_SRC_OFFSET ) & CSP_ID2_SRC_MASK ;
172- packet -> id .dport = (id2 >> CSP_ID2_DPORT_OFFSET ) & CSP_ID2_DPORT_MASK ;
173- packet -> id .sport = (id2 >> CSP_ID2_SPORT_OFFSET ) & CSP_ID2_SPORT_MASK ;
174- packet -> id .flags = (id2 >> CSP_ID2_FLAGS_OFFSET ) & CSP_ID2_FLAGS_MASK ;
175-
176- return 0 ;
160+ csp_id_t id ;
161+ id .pri = (id2 >> CSP_ID2_PRIO_OFFSET ) & CSP_ID2_PRIO_MASK ;
162+ id .dst = (id2 >> CSP_ID2_DST_OFFSET ) & CSP_ID2_DST_MASK ;
163+ id .src = (id2 >> CSP_ID2_SRC_OFFSET ) & CSP_ID2_SRC_MASK ;
164+ id .dport = (id2 >> CSP_ID2_DPORT_OFFSET ) & CSP_ID2_DPORT_MASK ;
165+ id .sport = (id2 >> CSP_ID2_SPORT_OFFSET ) & CSP_ID2_SPORT_MASK ;
166+ id .flags = (id2 >> CSP_ID2_FLAGS_OFFSET ) & CSP_ID2_FLAGS_MASK ;
167+
168+ return id ;
177169}
178170
179171static void csp_id2_setup_rx (csp_packet_t * packet ) {
@@ -197,12 +189,22 @@ void csp_id_prepend(csp_packet_t * packet) {
197189 }
198190}
199191
200- int csp_id_strip ( csp_packet_t * packet ) {
192+ csp_id_t csp_id_extract ( const uint8_t * data ) {
201193 if (csp_conf .version == 2 ) {
202- return csp_id2_strip ( packet );
194+ return csp_id2_extract ( data );
203195 } else {
204- return csp_id1_strip (packet , false);
196+ return csp_id1_extract (data , false);
197+ }
198+ }
199+
200+ int csp_id_strip (csp_packet_t * packet ) {
201+ if (packet -> frame_length < csp_id_get_header_size ()) {
202+ return -1 ;
205203 }
204+
205+ packet -> id = csp_id_extract (packet -> frame_begin );
206+ packet -> length = packet -> frame_length - csp_id_get_header_size ();
207+ return 0 ;
206208}
207209
208210#if (CSP_FIXUP_V1_ZMQ_LITTLE_ENDIAN )
@@ -216,14 +218,24 @@ void csp_id_prepend_fixup_cspv1(csp_packet_t * packet) {
216218 }
217219}
218220
219- int csp_id_strip_fixup_cspv1 ( csp_packet_t * packet ) {
221+ csp_id_t csp_id_extract_fixup_cspv1 ( const uint8_t * data ) {
220222 if (csp_conf .version == 2 ) {
221- return csp_id2_strip ( packet );
223+ return csp_id2_extract ( data );
222224 } else {
223- return csp_id1_strip ( packet , true);
225+ return csp_id1_extract ( data , true);
224226 }
225227}
226228
229+ int csp_id_strip_fixup_cspv1 (csp_packet_t * packet ) {
230+ if (packet -> frame_length < csp_id_get_header_size ()) {
231+ return -1 ;
232+ }
233+
234+ packet -> id = csp_id_extract_cspv1 (packet -> frame_begin );
235+ packet -> length = packet -> frame_length - csp_id_get_header_size ();
236+ return 0 ;
237+ }
238+
227239#endif
228240
229241int csp_id_setup_rx (csp_packet_t * packet ) {
0 commit comments