ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/rohc/d_util.h
Revision: 1.1
Committed: Sun Feb 8 06:02:44 2004 UTC (20 years, 4 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: ROHC-IMPORT-2004-02-08
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 /*
2     ROHC Project 2003 at Lulea University of Technology, Sweden.
3     Authors: Andreas Vernersson <andver-8@student.luth.se>
4     Daniel Pettersson <danpet-7@student.luth.se>
5     Erik Soderstrom <soderstrom@yahoo.com>
6     Fredrik Lindstrom <frelin-9@student.luth.se>
7     Johan Stenmark <johste-8@student.luth.se>
8     Martin Juhlin <juhlin@users.sourceforge.net>
9     Mikael Larsson <larmik-9@student.luth.se>
10     Robert Maxe <robmax-1@student.luth.se>
11    
12     Copyright (C) 2003 Andreas Vernersson, Daniel Pettersson,
13     Erik Soderström, Fredrik Lindström, Johan Stenmark,
14     Martin Juhlin, Mikael Larsson, Robert Maxe.
15    
16     This program is free software; you can redistribute it and/or modify
17     it under the terms of the GNU General Public License as published by
18     the Free Software Foundation; either version 2 of the License, or
19     (at your option) any later version.
20    
21     This program is distributed in the hope that it will be useful,
22     but WITHOUT ANY WARRANTY; without even the implied warranty of
23     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24     GNU General Public License for more details.
25    
26     You should have received a copy of the GNU General Public License
27     along with this program; if not, write to the Free Software
28     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29     */
30     #ifndef _D_UTIL_H
31     #define _D_UTIL_H
32    
33     #include <linux/ip.h>
34     #include <linux/udp.h>
35     #include "rohc.h"
36    
37     #define OLD_REF_VALUE 0
38     #define LAST_REF_VALUE 1
39    
40     // IP-id struct
41     struct sd_ip_id_decode
42     {
43     int id_ref;
44     int sn_ref;
45     };
46    
47     // Least Significant Bits decoding
48     struct sd_lsb_decode
49     {
50     int v_ref_d;
51     int old_v_ref_d;
52     int p;
53     };
54     // initiate the ip-id struct
55     // in: the ip-id struct, the reference for ip-id, the sequenze number
56     void d_ip_id_init(struct sd_ip_id_decode * s,int id_ref, int sn_ref);
57    
58     // Decode the ip-id offset in packet m and return the ip_id
59     // Do not forget to update the id_ref and sn_ref after a crc-success
60     // in: the ip-id struct, the packet m containing the ip-id offset, the
61     // length of the offset and the sequence number of packet m.
62     // out:ip_id
63     int d_ip_id_decode(struct sd_ip_id_decode * s, int m, int length, int sn);
64    
65     // update the reference values for the ip-id and the sequence number
66     void d_ip_id_update(struct sd_ip_id_decode * s, int id_ref, int sn_ref);
67    
68     // update the reference value
69     void d_lsb_update(struct sd_lsb_decode * s, int v_ref_d);
70    
71     // copy the value in v_ref_d to old_v_ref_d
72     void d_lsb_sync_ref(struct sd_lsb_decode * s);
73    
74     // get the old value of v_ref_d
75     int d_get_lsb_old_ref(struct sd_lsb_decode * s);
76    
77     // Decode a LSB-value, do not forget to update the v_ref_d after a CRC-success
78     // in: the struct were the old received value is present
79     // the LSB-value to decode and the length of it in bits
80     //
81     // out:the decoded value
82     int d_lsb_decode(struct sd_lsb_decode * s, int m,int length);
83    
84     // Initiate the lsb struct
85     // in: the value of v_ref_d and type of p value
86     void d_lsb_init(struct sd_lsb_decode * s,int v_ref_d, int p);
87    
88     // get the reference value
89     int d_get_lsb_ref(struct sd_lsb_decode * s);
90    
91     // Decide if the field is a padding field
92     // Return: 1 = padding
93     // 0 = else
94     int d_is_paddning(const unsigned char *);
95    
96     // Decide if the field is a feedback field
97     // Return: 1 = feedback header
98     // 0 = else
99     int d_is_feedback(const unsigned char *);
100    
101     // Decide if the field is a segment field
102     // Return: 1 = segment
103     // 0 = else
104     int d_is_segment(const unsigned char *);
105    
106     // Return the size of the feedback
107     // In: Bytes of a feedback header
108     // Out: Size
109     int d_feedback_size(const unsigned char *);
110    
111     // Decide how many bytes the feedback header is
112     // In: Bytes of a feedback header
113     // Out: the size in bytes (1-2)
114     int d_feedback_headersize(const unsigned char *);
115    
116     // Check if a byte is a add-cid value
117     // It is also possible to use d_decode_add_cid instead.
118     // In: Bytes
119     // Out: 1 = Add-cid value
120     // 0 = else
121     int d_is_add_cid(const unsigned char *);
122    
123     // Decode the add-cid value
124     // In: Bytes
125     // Out: 1-15, cid value
126     // 0, no cid value
127     int d_decode_add_cid(const unsigned char *);
128    
129     // Decide if a byte is a ir-field
130     // In: Bytes
131     // Out: 1 = IR, 0 = else
132     int d_is_ir(const unsigned char *);
133    
134     // Decide if a byte is a irdyn-field
135     // In: Bytes
136     // Out: 1 = IR-Dyn, 0 = else
137     int d_is_irdyn(const unsigned char *);
138    
139     // Decide the size of the self-decsribing variable-length value
140     // In: Bytes
141     // Out: 1-4
142     int d_sdvalue_size(const unsigned char *);
143    
144     // Decode a self-describing variable-length value
145     // In: Bytes
146     // Out: The self-describing variable-length value
147     int d_sdvalue_decode(const unsigned char *);
148    
149     // Decode the static part of a ipv4 rohc packet and store it in a ip-structure
150     // Return the number of used bytes
151     int d_decode_static_ip4(const unsigned char *, struct iphdr * dest);
152    
153     // Decode the static part in a udp rohc packet and store it in a udp-structure
154     // Return the number of used bytes
155     int d_decode_static_udp(const unsigned char *, struct udphdr * dest);
156    
157     // Decode the dynamic part in a ipv4 rohc packet and store it in a ip-structure
158     // Return the number of used bytes
159     int d_decode_dynamic_ip4(const unsigned char *, struct iphdr * dest, int * rnd, int * nbo);
160    
161     // Decode the dynamic part in a udp rohc packet and store it in a udp-structure
162     // Return the number of used bytes
163     int d_decode_dynamic_udp(const unsigned char *, struct udphdr * dest);
164    
165     // Decode the dynamic part in a udp-lite rohc packet and store it in a udp-structure
166     // Return the number of used bytes
167     int d_decode_dynamic_udp_lite(const unsigned char *data, struct udphdr * dest);
168    
169     #endif
170    
171    
172    
173    
174    
175    
176    
177    
178    
179