@@ -862,11 +862,6 @@ static inline u8_t uncompress_sa(struct net_pkt *pkt,
862
862
struct net_ipv6_hdr * ipv6 ,
863
863
u8_t offset )
864
864
{
865
- if (CIPHC [1 ] & NET_6LO_IPHC_SAC_1 ) {
866
- NET_DBG ("SAC_1" );
867
- NET_DBG ("SAM_00 unspecified address" );
868
- return offset ;
869
- }
870
865
871
866
NET_DBG ("SAC_0" );
872
867
@@ -913,16 +908,11 @@ static inline u8_t uncompress_sa_ctx(struct net_pkt *pkt,
913
908
u8_t offset ,
914
909
struct net_6lo_context * ctx )
915
910
{
916
- if (!ctx ) {
917
- return uncompress_sa (pkt , ipv6 , offset );
918
- }
911
+ NET_DBG ("SAC_1" );
919
912
920
913
switch (CIPHC [1 ] & NET_6LO_IPHC_SAM_11 ) {
921
914
case NET_6LO_IPHC_SAM_00 :
922
- NET_DBG ("SAM_00 full src addr inlined" );
923
-
924
- memcpy (ipv6 -> src .s6_addr , & CIPHC [offset ], 16 );
925
- offset += 16 ;
915
+ NET_DBG ("SAM_00 unspecified address" );
926
916
break ;
927
917
case NET_6LO_IPHC_SAM_01 :
928
918
NET_DBG ("SAM_01 last 64 bits are inlined" );
@@ -978,8 +968,6 @@ static inline u8_t uncompress_da_mcast(struct net_pkt *pkt,
978
968
NET_DBG ("Dst is multicast" );
979
969
980
970
if (CIPHC [1 ] & NET_6LO_IPHC_DAC_1 ) {
981
- /* TODO: DAM00 Unicast-Prefix-based IPv6 Multicast Addresses */
982
- /* Reserved DAM_01, DAM_10, DAM_11 */
983
971
NET_WARN ("Unsupported DAM options" );
984
972
return 0 ;
985
973
}
@@ -1033,17 +1021,12 @@ static inline u8_t uncompress_da(struct net_pkt *pkt,
1033
1021
struct net_ipv6_hdr * ipv6 ,
1034
1022
u8_t offset )
1035
1023
{
1024
+ NET_DBG ("DAC_0" );
1025
+
1036
1026
if (CIPHC [1 ] & NET_6LO_IPHC_M_1 ) {
1037
1027
return uncompress_da_mcast (pkt , ipv6 , offset );
1038
1028
}
1039
1029
1040
- if (CIPHC [1 ] & NET_6LO_IPHC_DAC_1 ) {
1041
- /* Invalid case: ctx doesn't exists , but DAC is 1*/
1042
- return 0 ;
1043
- }
1044
-
1045
- NET_DBG ("DAC_0" );
1046
-
1047
1030
switch (CIPHC [1 ] & NET_6LO_IPHC_DAM_11 ) {
1048
1031
case NET_6LO_IPHC_DAM_00 :
1049
1032
NET_DBG ("DAM_00 full dst addr inlined" );
@@ -1087,21 +1070,12 @@ static inline u8_t uncompress_da_ctx(struct net_pkt *pkt,
1087
1070
u8_t offset ,
1088
1071
struct net_6lo_context * ctx )
1089
1072
{
1090
- if (!ctx ) {
1091
- return uncompress_da (pkt , ipv6 , offset );
1092
- }
1073
+ NET_DBG ("DAC_1" );
1093
1074
1094
1075
if (CIPHC [1 ] & NET_6LO_IPHC_M_1 ) {
1095
1076
return uncompress_da_mcast (pkt , ipv6 , offset );
1096
1077
}
1097
1078
1098
- if (!(CIPHC [1 ] & NET_6LO_IPHC_DAC_1 )) {
1099
- /* Invalid case: ctx exists but DAC is 0. */
1100
- return 0 ;
1101
- }
1102
-
1103
- NET_DBG ("DAC_1" );
1104
-
1105
1079
switch (CIPHC [1 ] & NET_6LO_IPHC_DAM_11 ) {
1106
1080
case NET_6LO_IPHC_DAM_01 :
1107
1081
NET_DBG ("DAM_01 last 64 bits are inlined" );
@@ -1210,7 +1184,7 @@ static inline u8_t uncompress_nh_udp(struct net_pkt *pkt,
1210
1184
1211
1185
#if defined(CONFIG_NET_6LO_CONTEXT )
1212
1186
/* Helper function to uncompress src and dst contexts */
1213
- static inline bool uncompress_cid (struct net_pkt * pkt ,
1187
+ static inline void uncompress_cid (struct net_pkt * pkt ,
1214
1188
struct net_6lo_context * * src ,
1215
1189
struct net_6lo_context * * dst )
1216
1190
{
@@ -1230,17 +1204,6 @@ static inline bool uncompress_cid(struct net_pkt *pkt,
1230
1204
if (!(* dst )) {
1231
1205
NET_DBG ("Unknown dst cid %d" , cid );
1232
1206
}
1233
-
1234
- /* If CID flag set and src or dst context not available means,
1235
- * either we don't have context information or we received
1236
- * corrupted packet.
1237
- */
1238
- if (!* src && !* dst ) {
1239
- NET_ERR ("Context information does not exist in cache" );
1240
- return false;
1241
- }
1242
-
1243
- return true;
1244
1207
}
1245
1208
#endif
1246
1209
@@ -1259,10 +1222,7 @@ static inline bool uncompress_IPHC_header(struct net_pkt *pkt)
1259
1222
1260
1223
if (CIPHC [1 ] & NET_6LO_IPHC_CID_1 ) {
1261
1224
#if defined(CONFIG_NET_6LO_CONTEXT )
1262
- if (!uncompress_cid (pkt , & src , & dst )) {
1263
- return false;
1264
- }
1265
-
1225
+ uncompress_cid (pkt , & src , & dst );
1266
1226
offset ++ ;
1267
1227
#else
1268
1228
NET_WARN ("Context based uncompression not enabled" );
@@ -1298,25 +1258,42 @@ static inline bool uncompress_IPHC_header(struct net_pkt *pkt)
1298
1258
1299
1259
/* Uncompress Source Address */
1300
1260
#if defined(CONFIG_NET_6LO_CONTEXT )
1301
- offset = uncompress_sa_ctx (pkt , ipv6 , offset , src );
1302
- if (!offset ) {
1303
- goto fail ;
1261
+ if (CIPHC [1 ] & NET_6LO_IPHC_SAC_1 ) {
1262
+ if (!src ) {
1263
+ NET_ERR ("SAC is set but src context doesn't exists" );
1264
+ goto fail ;
1265
+ }
1266
+
1267
+ offset = uncompress_sa_ctx (pkt , ipv6 , offset , src );
1268
+ } else {
1269
+ offset = uncompress_sa (pkt , ipv6 , offset );
1304
1270
}
1305
1271
#else
1306
1272
offset = uncompress_sa (pkt , ipv6 , offset );
1307
1273
#endif
1308
1274
1309
1275
/* Uncompress Destination Address */
1310
1276
#if defined(CONFIG_NET_6LO_CONTEXT )
1311
- offset = uncompress_da_ctx (pkt , ipv6 , offset , dst );
1312
- if (!offset ) {
1313
- goto fail ;
1277
+ if (CIPHC [1 ] & NET_6LO_IPHC_DAC_1 ) {
1278
+ if (CIPHC [1 ] & NET_6LO_IPHC_M_1 ) {
1279
+ /* TODO: DAM00 Unicast-Prefix-based IPv6 Multicast
1280
+ * Addresses. DAM_01, DAM_10 and DAM_11 are reserved.
1281
+ */
1282
+ NET_ERR ("DAC_1 and M_1 is not supported" );
1283
+ goto fail ;
1284
+ }
1285
+
1286
+ if (!dst ) {
1287
+ NET_ERR ("DAC is set but dst context doesn't exists" );
1288
+ goto fail ;
1289
+ }
1290
+
1291
+ offset = uncompress_da_ctx (pkt , ipv6 , offset , dst );
1292
+ } else {
1293
+ offset = uncompress_da (pkt , ipv6 , offset );
1314
1294
}
1315
1295
#else
1316
1296
offset = uncompress_da (pkt , ipv6 , offset );
1317
- if (!offset ) {
1318
- goto fail ;
1319
- }
1320
1297
#endif
1321
1298
1322
1299
net_buf_add (frag , NET_IPV6H_LEN );
0 commit comments