← Back to team overview

rohc team mailing list archive

Re: decompressor not working for me

 

Hi,

> I am trying to used the rohc source code in my application for
> uclinux.
> 
> I have done initialization of comp and decomp and crc tables as
> described in the instructions.
> 
> I give 84 byte ip packet to rohc_compress function.
> this works fine and does not crash and does shows rohc_size less than
> 84.
> 
> for testing purpose i called rohc_decompress function immediately
> after the rohc compress but decompress function crashes the
> application when it tries to read the IP-ID from the ROHC_packet
> given as input.
>
> [...]

I tested the code you put in your email on my Linux system without any
problem. No crash at all. Your problem may come from :
 - a problem of the ROHC library that appends only on uclinux,
 - a difference between your program and mine for compressor and
   decompressor initialisation.

In order to analyse the problem further, could you please run the test
program I attached to my email and send me the output ?

You may compile it and run it as follow:
 $ gcc -g -Wall -Werror -c -o test.o test.c
 $ gcc -lrohc_common -lrohc_comp -lrohc_decomp -lm  test.o -o test
 $ ./test
[rohc_comp.c:67 rohc_alloc_compressor()] creating compressor
0x45 0x00 0x00 0x54 0x00 0x00 0x40 0x00 
0x40 0x01 0x85 0x42 0xc6 0xa8 0x14 0x0a 
0xc6 0xa8 0x14 0x0c 0x08 0x00 0x12 0xa4 
0xeb 0x02 0x00 0x00 0x40 0x7a 0xb9 0xde 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 
[rohc_comp.c:175 rohc_compress()] size of IP packet = 84 bytes
[rohc_comp.c:198 rohc_compress()] IP protocol = 1
[rohc_comp.c:203 rohc_compress()] no profile found, using default IP
profile
[rohc_comp.c:1121 c_find_context()] no context was found
[rohc_comp.c:1035 c_create_context()] take the first unused context
(CID = 0)
[rohc_comp.c:1075 c_create_context()] context (CID = 0) created
(num_used = 1)
[rohc_comp.c:269 rohc_compress()] selected compression profile = IP /
Compressor (0x0004)
[rohc_comp.c:1302 c_piggyback_get()] add 0 byte(s) of feedback data
[rohc_comp.c:287 rohc_compress()] compress the packet #1
[c_generic.c:844 c_generic_encode()] SN = 1
[c_generic.c:6120 changed_dynamic_both_hdr()] check for changed fields
in the outer IP header
[c_generic.c:862 c_generic_encode()] send_static = 0, send_dynamic = 0
[c_generic.c:870 c_generic_encode()] ip_id = 0x0000, context_sn = 1
[c_generic.c:2230 update_variables()] ip_id delta = 0xffffffff /
4294967295
[c_generic.c:2231 update_variables()] ip_id bits = -1
[c_generic.c:2241 update_variables()] sn bits=-1
[c_generic.c:2579 decide_packet()] IR state
[c_generic.c:2804 code_IR_packet()] code IR packet (CID = 0)
[cid.c:57 code_cid_values()] CID = 0 => no add-CID
[c_generic.c:2821 code_IR_packet()] type of packet + D flag = 0xfd
[c_generic.c:2825 code_IR_packet()] profile ID = 0x04
[c_generic.c:2831 code_IR_packet()] CRC = 0x00 for CRC calculation
[c_generic.c:3096 code_ipv4_static_part()] version = 0x40
[c_generic.c:3101 code_ipv4_static_part()] protocol = 0x01
[c_generic.c:3111 code_ipv4_static_part()] src addr = c6 a8 14 0a
[c_generic.c:3119 code_ipv4_static_part()] dst addr = c6 a8 14 0c
[c_generic.c:3305 code_ipv4_dynamic_part()] TOS = 0x00, TTL = 0x40,
IP-ID = 0x0000, df_rnd_nbo = 0xa0 (DF = 1, RND = 0, NBO = 1)
[c_generic.c:2890 code_IR_packet()] SN = 1 -> 0x0001
[c_generic.c:2896 code_IR_packet()] CRC (header length = 20, crc = 0xaa)
[rohc_comp.c:362 rohc_compress()] ROHC size = 84 (feedback = 0, header
= 20, payload = 64), output buffer size = 1024
ip_size = 84 & rohc_size = 84
0xfd 0x04 0xaa 0x40 0x01 0xc6 0xa8 0x14
0x0a 0xc6 0xa8 0x14 0x0c 0x00 0x40 0x00
0x00 0xa0 0x00 0x01 0x08 0x00 0x12 0xa4
0xeb 0x02 0x00 0x00 0x40 0x7a 0xb9 0xde
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00
[rohc_decomp.c:399 rohc_decompress()] decompress the packet #1
[rohc_decomp.c:550 d_decode_feedback_first()] skip 0 byte(s) of padding
[rohc_decomp.c:846 rohc_ir_packet_crc_ok()] size of IR packet header :
20
[rohc_decomp.c:865 rohc_ir_packet_crc_ok()] CRC OK (crc = 0xaa,
profile_id = 4, largecid = 0, addcidUsed = 0, ir_size = 20)
[d_generic.c:1465 d_generic_decode_ir()] decode an IR packet
[d_generic.c:1769 d_decode_static_ip4()] IP Version = 4
[d_generic.c:1775 d_decode_static_ip4()] Protocol = 0x01
[d_generic.c:1781 d_decode_static_ip4()] Source Address = 0x0a14a8c6
[d_generic.c:1787 d_decode_static_ip4()] Destination Address =
0x0c14a8c6
[d_generic.c:1927 d_decode_dynamic_ip4()] TOS = 0x00
[d_generic.c:1933 d_decode_dynamic_ip4()] TTL = 0x40
[d_generic.c:1939 d_decode_dynamic_ip4()] IP-ID = 0x0000
[d_generic.c:1952 d_decode_dynamic_ip4()] DF = 1, RND = 0, NBO = 1
[d_generic.c:5316 build_uncompressed_ip4()] IP-ID = 0x0000
[d_generic.c:5320 build_uncompressed_ip4()] IHL = 0x5
[d_generic.c:5325 build_uncompressed_ip4()] Total Length = 0x0054 (IHL
* 4 + 64)
[d_generic.c:5328 build_uncompressed_ip4()] IP checksum = 0x8542
[d_generic.c:5683 update_inter_packet()] current time = 1699587878 and
last time = 0
[d_generic.c:5697 update_inter_packet()] inter_arrival_time = 0 and
current arrival delta is = 0
[d_generic.c:1666 d_generic_decode_ir()] ROHC payload (length = 64
bytes) starts at offset 20
[rohc_decomp.c:411 rohc_decompress()] state in decompressor = 3
[rohc_decomp.c:484 rohc_decompress()] feedback curr -12
[rohc_decomp.c:491 rohc_decompress()] feedback curr 0
[rohc_comp.c:124 rohc_free_compressor()] free contexts
[rohc_comp.c:128 rohc_free_compressor()] free feedback buffer
$ echo $?
0

Regards,

Didier Barvaux
Viveris Technologies



Follow ups

References