← Back to team overview

rohc team mailing list archive

Re: [Question #249394]: Packets cannot be compressed while using RAW socket packets

 

Question #249394 on rohc changed:
https://answers.launchpad.net/rohc/+question/249394

Ashok Kumar posted a new comment:
If I am enabling the Uncompressed profile, it works. If that is the case
why it doesn't work for UDP profile. Below shown is my modified code and
please help me to sort out this problem..

#include<stdio.h> 
#include<stdlib.h>    
#include<string.h>    
#include<net/ethernet.h> 
#include<netinet/udp.h>   
#include<netinet/tcp.h> 
#include<netinet/ip_icmp.h>  
#include<netinet/ip.h>   
#include<sys/socket.h>
#include<arpa/inet.h>
#include<rohc.h>
#include<rohc_comp.h>
#include<rohc_decomp.h>
#define BUFFER_SIZE 2048
 
void ProcessPacket(unsigned char* , int);
void print_ip_header(unsigned char* , int);
void print_tcp_packet(unsigned char* , int);
int print_udp_packet(unsigned char * , int);
void print_icmp_packet(unsigned char* , int);
void PrintData (unsigned char* , int);

static int gen_random_num(const struct rohc_comp *const comp,void *const user_context);
 
int sock_raw;
FILE *logfile;
int tcp=0,udp=0,icmp=0,others=0,igmp=0,total=0,i,j;
struct sockaddr_in source,dest;

int main()
{
    int saddr_size , data_size;
    struct sockaddr saddr;
    struct in_addr in;
	     
    unsigned char *buffer = (unsigned char *)malloc(65536); 
     
    logfile=fopen("log.txt","w");
    if(logfile==NULL) printf("Unable to create file.");
    printf("Starting...\n");
  
    sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP);
	
    if(sock_raw < 0)
    {
        printf("Socket Error\n");
        return 1;
    }
    while(1)
    {
        saddr_size = sizeof saddr;
        data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);
        if(data_size <0 )
        {
            printf("Recvfrom error , failed to get packets\n");
            return 1;
        }
        
        ProcessPacket(buffer , data_size);
    }
    close(sock_raw);
    printf("Finished");
    return 0;
}
 
void ProcessPacket(unsigned char* buffer, int size)
{
    //Get the IP Header part of this packet
    struct iphdr *iph = (struct iphdr*)buffer;
	++total;
    switch (iph->protocol) 
    {
        case 1:  
            ++icmp;
            break;
         
        case 2:  
            ++igmp;
            break;
         
        case 6:  
            ++tcp;
            print_tcp_packet(buffer , size);
            break;
         
        case 17: 
            ++udp;
            print_udp_packet(buffer , size);
            break;
         
        default: 
            ++others;
            break;
    }
    printf("TCP : %d   UDP : %d   ICMP : %d   IGMP : %d   Others : %d   Total : %d\r",tcp,udp,icmp,igmp,others,total);
}
 
void print_ip_header(unsigned char* Buffer, int Size)
{
    unsigned short iphdrlen;
         
    struct iphdr *iph = (struct iphdr *)Buffer;
    iphdrlen =iph->ihl*4;
	
     
    memset(&source, 0, sizeof(source));
    source.sin_addr.s_addr = iph->saddr;
     
    memset(&dest, 0, sizeof(dest));
    dest.sin_addr.s_addr = iph->daddr;
     
    fprintf(logfile,"\n");
    fprintf(logfile,"IP Header\n");
    fprintf(logfile,"   |-IP Version        : %d\n",(unsigned int)iph->version);
    fprintf(logfile,"   |-IP Header Length  : %d DWORDS or %d Bytes\n",(unsigned int)iph->ihl,((unsigned int)(iph->ihl))*4);
    fprintf(logfile,"   |-Type Of Service   : %d\n",(unsigned int)iph->tos);
    fprintf(logfile,"   |-IP Total Length   : %d  Bytes(Size of Packet)\n",ntohs(iph->tot_len));
    fprintf(logfile,"   |-Identification    : %d\n",ntohs(iph->id));
    fprintf(logfile,"   |-TTL      : %d\n",(unsigned int)iph->ttl);
    fprintf(logfile,"   |-Protocol : %d\n",(unsigned int)iph->protocol);
    fprintf(logfile,"   |-Checksum : %d\n",ntohs(iph->check));
    fprintf(logfile,"   |-Source IP        : %s\n",inet_ntoa(source.sin_addr));
    fprintf(logfile,"   |-Destination IP   : %s\n",inet_ntoa(dest.sin_addr));
}
 
void print_tcp_packet(unsigned char* Buffer, int Size)
{
    unsigned short iphdrlen;
     
    struct iphdr *iph = (struct iphdr *)Buffer;
    iphdrlen = iph->ihl*4;
	
     
    struct tcphdr *tcph=(struct tcphdr*)(Buffer + iphdrlen);
             
    fprintf(logfile,"\n\n***********************TCP Packet*************************\n");    
         
    print_ip_header(Buffer,Size);
         
    fprintf(logfile,"\n");
    fprintf(logfile,"TCP Header\n");
    fprintf(logfile,"   |-Source Port      : %u\n",ntohs(tcph->source));
    fprintf(logfile,"   |-Destination Port : %u\n",ntohs(tcph->dest));
    fprintf(logfile,"   |-Sequence Number    : %u\n",ntohl(tcph->seq));
    fprintf(logfile,"   |-Acknowledge Number : %u\n",ntohl(tcph->ack_seq));
    fprintf(logfile,"   |-Header Length      : %d DWORDS or %d BYTES\n" ,(unsigned int)tcph->doff,(unsigned int)tcph->doff*4);
    fprintf(logfile,"   |-Urgent Flag          : %d\n",(unsigned int)tcph->urg);
    fprintf(logfile,"   |-Acknowledgement Flag : %d\n",(unsigned int)tcph->ack);
    fprintf(logfile,"   |-Push Flag            : %d\n",(unsigned int)tcph->psh);
    fprintf(logfile,"   |-Reset Flag           : %d\n",(unsigned int)tcph->rst);
    fprintf(logfile,"   |-Synchronise Flag     : %d\n",(unsigned int)tcph->syn);
    fprintf(logfile,"   |-Finish Flag          : %d\n",(unsigned int)tcph->fin);
    fprintf(logfile,"   |-Window         : %d\n",ntohs(tcph->window));
    fprintf(logfile,"   |-Checksum       : %d\n",ntohs(tcph->check));
    fprintf(logfile,"   |-Urgent Pointer : %d\n",tcph->urg_ptr);
    fprintf(logfile,"\n");
    fprintf(logfile,"                        DATA Dump                         ");
    fprintf(logfile,"\n");
         
    fprintf(logfile,"IP Header\n");
    PrintData(Buffer,iphdrlen);
         
    fprintf(logfile,"TCP Header\n");
    PrintData(Buffer+iphdrlen,tcph->doff*4);
         
    fprintf(logfile,"Data Payload\n");  
    PrintData(Buffer + iphdrlen + tcph->doff*4 , (Size - tcph->doff*4-iph->ihl*4) );
                         
    fprintf(logfile,"\n###########################################################");

}
 
int print_udp_packet(unsigned char *Buffer , int Size)
{
     
    unsigned short iphdrlen;
	unsigned int ip_packet_len, rohc_packet_len;
	unsigned char rohc_packet[BUFFER_SIZE], op_packet[BUFFER_SIZE];
	int ret;
     
    struct iphdr *iph = (struct iphdr *)Buffer;
    iphdrlen = iph->ihl*4;
     
    struct udphdr *udph = (struct udphdr*)(Buffer + iphdrlen);

	struct rohc_comp *compressor;
	struct rohc_decomp *decompressor;

	printf("\n Creating ROHC compressor......\n\n");
	compressor = rohc_alloc_compressor(15,0,0,0);
	if(compressor == NULL)
		{ 
			fprintf(stderr,"\n Failed creating compressor!!\n");
			rohc_free_compressor(compressor);
		}
		
			if(!rohc_comp_set_random_cb(compressor, gen_random_num, NULL))
			{
						fprintf(stderr, "\n Failed to set the compressor callback random numbers!!\n");
						rohc_free_compressor(compressor);
			 }
	
	rohc_activate_profile(compressor, ROHC_PROFILE_UNCOMPRESSED);	
	rohc_activate_profile(compressor, ROHC_PROFILE_IP);
	rohc_activate_profile(compressor, ROHC_PROFILE_UDP);
     
    fprintf(logfile,"\n\n***********************UDP Packet*************************\n");
     
    print_ip_header(Buffer,Size);  
	       
    fprintf(logfile,"\nUDP Header\n");
    fprintf(logfile,"   |-Source Port      : %d\n" , ntohs(udph->source));
    fprintf(logfile,"   |-Destination Port : %d\n" , ntohs(udph->dest));
    fprintf(logfile,"   |-UDP Length       : %d\n" , ntohs(udph->len));
    fprintf(logfile,"   |-UDP Checksum     : %d\n" , ntohs(udph->check));
     
    fprintf(logfile,"\n");
    fprintf(logfile,"IP Header\n");
    PrintData(Buffer , iphdrlen);
         
    fprintf(logfile,"UDP Header\n");
    PrintData(Buffer+iphdrlen , sizeof udph);
         
    fprintf(logfile,"Data Payload\n");  
    PrintData(Buffer + iphdrlen + sizeof udph ,( Size - sizeof udph - iph->ihl * 4 ));
     
    fprintf(logfile,"\n###########################################################");
	
	
	printf("\n Compressing the UDP/IP packet...\n\n");
	
	ip_packet_len = Size - sizeof udph - iph->ihl * 4;

	ret=rohc_compress2(compressor,Buffer,ip_packet_len,rohc_packet, BUFFER_SIZE, &rohc_packet_len);
	
	if(ret!=ROHC_OK)
	{
		fprintf(stderr, "Compression of IP packet failed\n");
	    rohc_free_compressor(compressor);
		return 1;
	}
	
	printf("\n ROHC packet after compression:\n");
	for(i = 0; i < ((unsigned int) rohc_packet_len); i++)
   	{
      	printf("0x%02x ", rohc_packet[i]);
      	if(i != 0 && ((i + 1) % 8) == 0)
      	{
         	printf("\n");
      	}
   	}
   	if(i != 0 && (i % 8) != 0) 
   	{
      	printf("\n");
   	}
	
	printf("\n Creating ROHC Decompressor.....");
	decompressor=rohc_alloc_decompressor(compressor);
	if(decompressor == NULL)
	{
		fprintf(stderr,"\n Failed creating decompressor!!\n");
		rohc_free_decompressor(decompressor);
	}
	
		if(!rohc_decomp_set_traces_cb(decompressor, NULL))
		{
			fprintf(stderr,"\n Failed to set callback traces for decompressor!!");
			rohc_free_decompressor(decompressor);
		} 
	printf("\n Decompressing the UDP/IP packet....\n");
	ret=rohc_decompress(decompressor,rohc_packet,rohc_packet_len,op_packet,BUFFER_SIZE);
	if(ret <= 0)
	{
		fprintf(stderr, "Decompression failed\n");
		rohc_free_decompressor(decompressor);
	}
	
	printf("\n IP packet after Decompression:\n\n");
	for(i = 0; i < ((unsigned int) ret); i++)
   	{
      	printf("0x%02x ", op_packet[i]);
      	if(i != 0 && ((i + 1) % 8) == 0)
      	{
         	printf("\n");
      	}
   	}
   	if(i != 0 && (i % 8) != 0) 
   	{
      	printf("\n");
   	}
	printf("\n Destroy the Compressor and Decompressor");
	rohc_free_compressor(compressor);
	rohc_free_decompressor(decompressor);
return 0;
}

static int gen_random_num(const struct rohc_comp *const comp,void *const user_context)
{
	return rand();
}

 
void print_icmp_packet(unsigned char* Buffer , int Size)
{
    unsigned short iphdrlen;
     
    struct iphdr *iph = (struct iphdr *)Buffer;
    iphdrlen = iph->ihl*4;
     
    struct icmphdr *icmph = (struct icmphdr *)(Buffer + iphdrlen);
             
    fprintf(logfile,"\n\n***********************ICMP Packet*************************\n");   
     
    print_ip_header(Buffer , Size);
             
    fprintf(logfile,"\n");
         
    fprintf(logfile,"ICMP Header\n");
    fprintf(logfile,"   |-Type : %d",(unsigned int)(icmph->type));
             
    if((unsigned int)(icmph->type) == 11) 
        fprintf(logfile,"  (TTL Expired)\n");
    else if((unsigned int)(icmph->type) == ICMP_ECHOREPLY) 
        fprintf(logfile,"  (ICMP Echo Reply)\n");
    fprintf(logfile,"   |-Code : %d\n",(unsigned int)(icmph->code));
    fprintf(logfile,"   |-Checksum : %d\n",ntohs(icmph->checksum));
    fprintf(logfile,"\n");
 
    fprintf(logfile,"IP Header\n");
    PrintData(Buffer,iphdrlen);
         
    fprintf(logfile,"UDP Header\n");
    PrintData(Buffer + iphdrlen , sizeof icmph);
         
    fprintf(logfile,"Data Payload\n");  
    PrintData(Buffer + iphdrlen + sizeof icmph , (Size - sizeof icmph - iph->ihl * 4));
     
    fprintf(logfile,"\n###########################################################");

}
 
void PrintData (unsigned char* data , int Size)
{
     
    for(i=0 ; i < Size ; i++)
    {
        if( i!=0 && i%16==0)   
        {
            fprintf(logfile,"         ");
            for(j=i-16 ; j<i ; j++)
            {
                if(data[j]>=32 && data[j]<=128)
                    fprintf(logfile,"%c",(unsigned char)data[j]); 
                 
                else fprintf(logfile,"."); 
            }
            fprintf(logfile,"\n");
        } 
         
        if(i%16==0) fprintf(logfile,"   ");
            fprintf(logfile," %02X",(unsigned int)data[i]);
                 
        if( i==Size-1)  
        {
            for(j=0;j<15-i%16;j++) fprintf(logfile,"   "); 
             
            fprintf(logfile,"         ");
             
            for(j=i-i%16 ; j<=i ; j++)
            {
                if(data[j]>=32 && data[j]<=128) fprintf(logfile,"%c",(unsigned char)data[j]);
                else fprintf(logfile,".");
            }
            fprintf(logfile,"\n");
        }
    }
}

Output:

 Creating ROHC compressor......

please define a callback for compressor traces
[rohc_comp.c:1102 rohc_comp_set_wlsb_window_width()] width of W-LSB sliding window set to 4
[rohc_comp.c:1159 rohc_comp_set_periodic_refreshes()] IR timeout for context periodic refreshes set to 1700
[rohc_comp.c:1161 rohc_comp_set_periodic_refreshes()] FO timeout for context periodic refreshes set to 700
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 1234 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 36780 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 33238 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 5020 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 5002 added to the UDP port list for RTP traffic
[rohc_comp.c:2955 c_create_contexts()] create enough room for 16 contexts (MAX_CID = 15)

 Compressing the UDP/IP packet...

[rohc_traces_internal.c:68 rohc_dump_packet()] uncompressed data, max 100 bytes (54 bytes):
[rohc_traces_internal.c:77 rohc_dump_packet()] 45 00 00 4e 1d c3 00 00   80 11 e5 38 0a b0 10 45 
[rohc_traces_internal.c:77 rohc_dump_packet()] 0a b0 11 ff 00 89 00 89   00 3a b7 4c ce 09 01 10 
[rohc_traces_internal.c:77 rohc_dump_packet()] 00 01 00 00 00 00 00 00   20 46 48 46 41 45 42 45 
[rohc_traces_internal.c:97 rohc_dump_packet()] 45 43 41 43 41 43 
[rohc_comp.c:609 rohc_compress2()] size of uncompressed packet = 54 bytes
[rohc_comp.c:640 rohc_compress2()] try to find the best profile for packet with transport protocol 0
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'RTP / Compressor' (0x0001)
[rohc_comp.c:2707 c_get_profile_from_packet()] skip profile 'UDP / Compressor' (0x0002) because it does not match packet
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'UDP-Lite / Compressor' (0x0008)
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'ESP / Compressor' (0x0003)
[c_generic.c:684 c_generic_check_profile()] the outer IP packet (type = 1) is not supported by the profile: only IPv4 and IPv6 are supported
[rohc_comp.c:2707 c_get_profile_from_packet()] skip profile 'IP / Compressor' (0x0004) because it does not match packet
[rohc_comp.c:649 rohc_compress2()] using profile 'Uncompressed / Compressor' (0x0000)
[rohc_comp.c:2902 c_find_context()] no context was found
[rohc_comp.c:657 rohc_compress2()] no existing context found for packet, create a new one
[rohc_comp.c:2789 c_create_context()] take the first unused context (CID = 0)
[rohc_comp.c:2833 c_create_context()] context (CID = 0) created (num_used = 1)
[rohc_comp.c:3060 rohc_feedback_get()] no feedback is available
[rohc_comp.c:3135 rohc_feedback_get()] add 0 byte(s) of feedback data
[rohc_comp.c:691 rohc_compress2()] compress the packet #1
[c_uncompressed.c:580 uncompressed_code_packet()] build IR packet
[c_uncompressed.c:648 uncompressed_code_IR_packet()] code IR packet (CID = 0)
[c_uncompressed.c:659 uncompressed_code_IR_packet()] first byte = 0xfc
[c_uncompressed.c:663 uncompressed_code_IR_packet()] Profile ID = 0x00
[c_uncompressed.c:671 uncompressed_code_IR_packet()] CRC on 2 bytes = 0xb7
[rohc_comp.c:828 rohc_compress2()] copy full 54-byte payload
[rohc_comp.c:2573 rohc_feedback_remove_locked()] 0 locked feedbacks removed
[rohc_comp.c:849 rohc_compress2()] ROHC size = 57 bytes (feedbacks = 0, header = 3, payload = 54), output buffer size = 2048

 ROHC packet after compression:
0xfc 0x00 0xb7 0x45 0x00 0x00 0x4e 0x1d 
0xc3 0x00 0x00 0x80 0x11 0xe5 0x38 0x0a 
0xb0 0x10 0x45 0x0a 0xb0 0x11 0xff 0x00 
0x89 0x00 0x89 0x00 0x3a 0xb7 0x4c 0xce 
0x09 0x01 0x10 0x00 0x01 0x00 0x00 0x00 
0x00 0x00 0x00 0x20 0x46 0x48 0x46 0x41 
0x45 0x42 0x45 0x45 0x43 0x41 0x43 0x41 
0x43 

 Creating ROHC Decompressor.....
 Decompressing the UDP/IP packet....
[rohc_comp.c:2113 rohc_comp_piggyback_feedback()] try to add 4 byte(s) of feedback to the next outgoing ROHC packet
[rohc_comp.c:2148 rohc_comp_piggyback_feedback()] 4 byte(s) of feedback added to the next outgoing ROHC packet

 IP packet after Decompression:

0x45 0x00 0x00 0x4e 0x1d 0xc3 0x00 0x00 
0x80 0x11 0xe5 0x38 0x0a 0xb0 0x10 0x45 
0x0a 0xb0 0x11 0xff 0x00 0x89 0x00 0x89 
0x00 0x3a 0xb7 0x4c 0xce 0x09 0x01 0x10 
0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 
0x20 0x46 0x48 0x46 0x41 0x45 0x42 0x45 
0x45 0x43 0x41 0x43 0x41 0x43 

 Destroy the Compressor and Decompressor[rohc_comp.c:328 rohc_free_compressor()] free compressor
TCP : 0   UDP : 1   ICMP : 0   IGMP : 0   Others : 0   Total : 1
 Creating ROHC compressor......

[rohc_comp.c:1102 rohc_comp_set_wlsb_window_width()] width of W-LSB sliding window set to 4
[rohc_comp.c:1159 rohc_comp_set_periodic_refreshes()] IR timeout for context periodic refreshes set to 1700
[rohc_comp.c:1161 rohc_comp_set_periodic_refreshes()] FO timeout for context periodic refreshes set to 700
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 1234 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 36780 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 33238 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 5020 added to the UDP port list for RTP traffic
[rohc_comp.c:1585 rohc_comp_add_rtp_port()] port 5002 added to the UDP port list for RTP traffic
[rohc_comp.c:2955 c_create_contexts()] create enough room for 16 contexts (MAX_CID = 15)

 Compressing the UDP/IP packet...

[rohc_traces_internal.c:68 rohc_dump_packet()] uncompressed data, max 100 bytes (54 bytes):
[rohc_traces_internal.c:77 rohc_dump_packet()] 45 00 00 4e 63 94 00 00   80 11 9f 87 0a b0 10 25 
[rohc_traces_internal.c:77 rohc_dump_packet()] 0a b0 11 ff 00 89 00 89   00 3a 92 7d e1 f6 01 10 
[rohc_traces_internal.c:77 rohc_dump_packet()] 00 01 00 00 00 00 00 00   20 45 43 45 44 45 48 45 
[rohc_traces_internal.c:97 rohc_dump_packet()] 42 44 49 44 49 43 
[rohc_comp.c:609 rohc_compress2()] size of uncompressed packet = 54 bytes
[rohc_comp.c:640 rohc_compress2()] try to find the best profile for packet with transport protocol 0
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'RTP / Compressor' (0x0001)
[rohc_comp.c:2707 c_get_profile_from_packet()] skip profile 'UDP / Compressor' (0x0002) because it does not match packet
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'UDP-Lite / Compressor' (0x0008)
[rohc_comp.c:2692 c_get_profile_from_packet()] skip disabled profile 'ESP / Compressor' (0x0003)
[c_generic.c:684 c_generic_check_profile()] the outer IP packet (type = 1) is not supported by the profile: only IPv4 and IPv6 are supported
[rohc_comp.c:2707 c_get_profile_from_packet()] skip profile 'IP / Compressor' (0x0004) because it does not match packet
[rohc_comp.c:649 rohc_compress2()] using profile 'Uncompressed / Compressor' (0x0000)
[rohc_comp.c:2902 c_find_context()] no context was found
[rohc_comp.c:657 rohc_compress2()] no existing context found for packet, create a new one
[rohc_comp.c:2789 c_create_context()] take the first unused context (CID = 0)
[rohc_comp.c:2833 c_create_context()] context (CID = 0) created (num_used = 1)
[rohc_comp.c:3060 rohc_feedback_get()] no feedback is available
[rohc_comp.c:3135 rohc_feedback_get()] add 0 byte(s) of feedback data
[rohc_comp.c:691 rohc_compress2()] compress the packet #1
[c_uncompressed.c:580 uncompressed_code_packet()] build IR packet
[c_uncompressed.c:648 uncompressed_code_IR_packet()] code IR packet (CID = 0)
[c_uncompressed.c:659 uncompressed_code_IR_packet()] first byte = 0xfc
[c_uncompressed.c:663 uncompressed_code_IR_packet()] Profile ID = 0x00
[c_uncompressed.c:671 uncompressed_code_IR_packet()] CRC on 2 bytes = 0xb7
[rohc_comp.c:828 rohc_compress2()] copy full 54-byte payload
[rohc_comp.c:2573 rohc_feedback_remove_locked()] 0 locked feedbacks removed
[rohc_comp.c:849 rohc_compress2()] ROHC size = 57 bytes (feedbacks = 0, header = 3, payload = 54), output buffer size = 2048

 ROHC packet after compression:
0xfc 0x00 0xb7 0x45 0x00 0x00 0x4e 0x63 
0x94 0x00 0x00 0x80 0x11 0x9f 0x87 0x0a 
0xb0 0x10 0x25 0x0a 0xb0 0x11 0xff 0x00 
0x89 0x00 0x89 0x00 0x3a 0x92 0x7d 0xe1 
0xf6 0x01 0x10 0x00 0x01 0x00 0x00 0x00 
0x00 0x00 0x00 0x20 0x45 0x43 0x45 0x44 
0x45 0x48 0x45 0x42 0x44 0x49 0x44 0x49 
0x43 

 Creating ROHC Decompressor.....
 Decompressing the UDP/IP packet....
[rohc_comp.c:2113 rohc_comp_piggyback_feedback()] try to add 4 byte(s) of feedback to the next outgoing ROHC packet
[rohc_comp.c:2148 rohc_comp_piggyback_feedback()] 4 byte(s) of feedback added to the next outgoing ROHC packet

 IP packet after Decompression:

0x45 0x00 0x00 0x4e 0x63 0x94 0x00 0x00 
0x80 0x11 0x9f 0x87 0x0a 0xb0 0x10 0x25 
0x0a 0xb0 0x11 0xff 0x00 0x89 0x00 0x89 
0x00 0x3a 0x92 0x7d 0xe1 0xf6 0x01 0x10 
0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 
0x20 0x45 0x43 0x45 0x44 0x45 0x48 0x45 
0x42 0x44 0x49 0x44 0x49 0x43 

 Destroy the Compressor and Decompressor[rohc_comp.c:328 rohc_free_compressor()] free compressor
TCP : 0   UDP : 2   ICMP : 0   IGMP : 0   Others : 0   Total : 2

-- 
You received this question notification because you are a member of ROHC
Team, which is an answer contact for rohc.