original files of m241
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
/* iprohc_coding_util.h - ROHC coding/decoding routines */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Wind River Systems, Inc.
|
||||
*
|
||||
* The right to copy, distribute or otherwise make use of this software
|
||||
* may be licensed only pursuant to the terms of an applicable Wind River
|
||||
* license agreement. No license to Wind River intellectual property rights
|
||||
* is granted herein. All rights not licensed by Wind River are reserved
|
||||
* by Wind River.
|
||||
*/
|
||||
|
||||
/*
|
||||
modification history
|
||||
--------------------
|
||||
01h,01oct11,ggz Added capability to simulate various ipid change pattern
|
||||
01g,01dec09,ggz Add LSB encoding
|
||||
01f,01dec09,ggz Include LSB routines regardless to the option IPROHC_WLSB_LSB
|
||||
01e,01dec09,ggz Added k parameter to some WLSB/LSB APIs
|
||||
01d,01dec09,ggz Added p = 0 support
|
||||
01c,01dec09,ggz Added 32 bit WLSB value support and a test case
|
||||
01b,02mar09,tlu Fix Linux build warning
|
||||
01a,05apr08,ggz Created
|
||||
*/
|
||||
|
||||
#ifndef IPROHC_CODING_UTIL_H
|
||||
#define IPROHC_CODING_UTIL_H
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* INCLUDE FILES
|
||||
****************************************************************************
|
||||
*/
|
||||
#define IPCOM_USE_CLIB_PROTO
|
||||
#include <ipcom_type.h>
|
||||
#include <ipcom_os.h>
|
||||
#include <ipcom_list.h>
|
||||
#include <ipcom_err.h>
|
||||
#include <ipcom_syslog.h>
|
||||
#include <ipcom_time.h>
|
||||
#include <ipcom_clib.h>
|
||||
#include "iprohc.h"
|
||||
/*
|
||||
****************************************************************************
|
||||
* DEFINES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#undef ROHC_DEBUG_TEST_WLSB
|
||||
#undef ROHC_DEBUG_ENABLE_LOG
|
||||
|
||||
|
||||
/*
|
||||
* For field values that are expected always to increase, p can be
|
||||
* set to -1. The interpretation interval becomes
|
||||
* v_ref + 1, v_ref + 2^k].
|
||||
*/
|
||||
#ifdef ROHC_DEBUG_TEST_WLSB
|
||||
#define P_FOR_INCR -1
|
||||
/* For field values that stay the same or increase, p can be set to
|
||||
0. The interpretation interval becomes [v_ref, v_ref + 2^k - 1].*/
|
||||
#define P_FOR_STAT_INCR 0
|
||||
#endif
|
||||
/*
|
||||
****************************************************************************
|
||||
* Public TYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
****************************************************************************
|
||||
* LOCAL TYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*#ifdef IPROHC_WLSB_LSB*/
|
||||
typedef struct cmp_wlsb_wnd{
|
||||
Ip_u32 val;
|
||||
Ip_u32 index;
|
||||
} cmp_wlsb_wnd;
|
||||
|
||||
/*
|
||||
This is a prototype for passsing WLSB stucts of variouse types to generic functions.
|
||||
We could use dynamic allocation but this is much faster.
|
||||
Warning: cmp_wnd rngBuf[1] - must always be the last in the structure.
|
||||
In case of modification of this structure the structure in
|
||||
iprohc_create_cmp_wlsb_struct macro should be updated as well.
|
||||
*/
|
||||
typedef struct cmp_wslb_cast{
|
||||
int rngBuf_marker;
|
||||
int rngBuf_curr;
|
||||
int num_of_vals;
|
||||
int sizeOfWnd;
|
||||
int numOfBits;
|
||||
int p;
|
||||
cmp_wlsb_wnd rngBuf[1]; /* This arrays must always be the last in the structure */
|
||||
} cmp_wslb_cast;
|
||||
|
||||
/*#endif*/ /*IPROHC_WLSB_LSB*/
|
||||
|
||||
|
||||
typedef struct cmp_lsb{
|
||||
Ip_u32 ref;
|
||||
Ip_u32 prev_ref;
|
||||
int p;
|
||||
int numOfBits;
|
||||
int num_of_vals;
|
||||
}cmp_lsb;
|
||||
|
||||
typedef struct cmp_lsb_intrvl{
|
||||
Ip_u32 left_margin;
|
||||
Ip_u32 right_margin;
|
||||
} cmp_lsb_intrvl;
|
||||
|
||||
|
||||
typedef struct dmp_lsb{
|
||||
Ip_u32 ref;
|
||||
Ip_u32 prev_ref;
|
||||
int p;
|
||||
Ip_u32 bit_mask;
|
||||
/*int numOfBits;*/
|
||||
int num_of_vals;
|
||||
}dmp_lsb;
|
||||
|
||||
typedef struct dmp_lsb_intrvl{
|
||||
Ip_u32 left_margin;
|
||||
Ip_u32 right_margin;
|
||||
}dmp_lsb_intrvl;
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* Application APIs
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* GLOBAL FUNCTIONS
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*#ifdef IPROHC_WLSB_LSB*/
|
||||
/*
|
||||
Add here WLSB structes with variouse lengt if needed. The name should be unique
|
||||
Warning cmp_wnd rngBuf[sizeOfWnd] - must always be the last on the structure
|
||||
*/
|
||||
#define iprohc_create_cmp_wlsb_struct(name, szOfWnd) \
|
||||
struct { \
|
||||
int rngBuf_marker; \
|
||||
int rngBuf_curr; \
|
||||
int num_of_vals; \
|
||||
int sizeOfWnd; \
|
||||
int numOfBits; \
|
||||
int p; \
|
||||
cmp_wlsb_wnd rngBuf[szOfWnd]; \
|
||||
} name
|
||||
|
||||
#define iprohc_create_cmp_lsb_struct(name) \
|
||||
cmp_lsb name
|
||||
IP_PUBLIC void iprohc_init_cmp_wlsb_struct(cmp_wslb_cast* wlsb, int sizeOfWnd,
|
||||
int numOfBits, int p);
|
||||
IP_PUBLIC Ip_bool iprohc_cmp_wlsb_add_val(cmp_wslb_cast* wlsb, Ip_u32 val, Ip_u32 index);
|
||||
IP_PUBLIC Ip_bool iprohc_cmp_wlsb_encode_val(cmp_wslb_cast *wlsb, Ip_u32 val, Ip_u32
|
||||
*enc_val, Ip_u8* enc_val_ln);
|
||||
/*#endif*/ /*IPROHC_WLSB_LSB*/
|
||||
|
||||
#define iprohc_create_cmp_lsb_struct(name) \
|
||||
cmp_lsb name
|
||||
|
||||
#define iprohc_create_dmp_lsb_struct(name) \
|
||||
dmp_lsb name
|
||||
|
||||
IP_PUBLIC void iprohc_init_cmp_lsb_struct(cmp_lsb* lsb, int numOfBits, int p);
|
||||
IP_PUBLIC void iprohc_cmp_lsb_add_val(cmp_lsb* lsb, Ip_u32 val);
|
||||
IP_PUBLIC Ip_bool iprohc_cmp_lsb_encode_val(cmp_lsb *lsb, Ip_u32 val, Ip_u32 *enc_val, Ip_u8* enc_val_ln);
|
||||
/* Don't initialize the WLSB ring buffer */
|
||||
IP_PUBLIC void iprohc_init_dmp_lsb_struct(dmp_lsb *lsb, int p, Ip_u32 bit_mask);
|
||||
IP_PUBLIC void iprohc_dmp_lsb_save_last_valid_ref(dmp_lsb* lsb, Ip_u32 rev);
|
||||
IP_PUBLIC Ip_bool iprohc_lsb_decode_and_save_ip_sn_ref(Ip_u32* dec_val, dmp_lsb *lsb, Ip_u32 val, Ip_u8 k);
|
||||
IP_PUBLIC Ip_bool iprohc_lsb_decode_and_save_ref(Ip_u32* dec_val, dmp_lsb *lsb, Ip_u32 val, Ip_u8 k);
|
||||
|
||||
IP_PUBLIC Ip_bool iprohc_lsb_encode_32(Ip_u32 ref_val, Ip_u32 val, Ip_u8 k, int p);
|
||||
IP_PUBLIC Ip_bool iprohc_lsb_decode_32(Ip_u32* dec_val, Ip_u32 ref_val,
|
||||
Ip_u32 val, Ip_u8 k, int p);
|
||||
|
||||
#ifdef IPROHC_USE_TEST
|
||||
#ifdef IPROHC_TCP_IP_SIMULATED_IPID
|
||||
IP_PUBLIC void iprohc_ipid_sim(Ipcom_pkt *pkt, Ip_u16 ipid_gen);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* LOCAL FUNCTIONS
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*#ifdef IPROHC_WLSB_LSB*/
|
||||
#ifdef ROHC_DEBUG_TEST_WLSB
|
||||
IP_PUBLIC void test_wlsb_ip_id(void);
|
||||
IP_PUBLIC void test_wlsb_32bit(void);
|
||||
IP_PUBLIC void test_lsb_16bit(void);
|
||||
IP_PUBLIC void test_lsb_32bit(void);
|
||||
IP_PUBLIC void test_lsb_32(void);
|
||||
#endif
|
||||
/*#endif*/ /* IPROHC_WLSB_LSB */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* END OF FILE
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user