[PATCH] openbsc[master]: Modifed version of slhc (RFC1144 implementation)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Fri Aug 5 11:28:08 UTC 2016


Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/635

to look at the new patch set (#3).

Modifed version of slhc (RFC1144 implementation)

The previously pushed slhc implementation has been modified to compile
and function outside of the kernel. Also debug log messages were added
and datatypes ware matched. The implementation is now ready to be used

Change-Id: I7a638e88a43b3eb9d006751a03ef2570e36613f0
---
M openbsc/include/openbsc/Makefile.am
M openbsc/include/openbsc/debug.h
R openbsc/include/openbsc/slhc.h
M openbsc/src/gprs/Makefile.am
M openbsc/src/gprs/slhc.c
5 files changed, 128 insertions(+), 177 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/35/635/3

diff --git a/openbsc/include/openbsc/Makefile.am b/openbsc/include/openbsc/Makefile.am
index c272b14..9ef8a15 100644
--- a/openbsc/include/openbsc/Makefile.am
+++ b/openbsc/include/openbsc/Makefile.am
@@ -18,7 +18,7 @@
 		 gprs_gb_parse.h smpp.h meas_feed.h \
 		 gprs_gsup_client.h bsc_msg_filter.h \
 		 oap.h oap_messages.h \
-		 gtphub.h
+		 gtphub.h gprs_sndcp.h slhc.h
 
 openbsc_HEADERS = gsm_04_08.h meas_rep.h bsc_api.h
 openbscdir = $(includedir)/openbsc
diff --git a/openbsc/include/openbsc/debug.h b/openbsc/include/openbsc/debug.h
index 43ebb19..90ddca5 100644
--- a/openbsc/include/openbsc/debug.h
+++ b/openbsc/include/openbsc/debug.h
@@ -29,6 +29,7 @@
 	DBSSGP,
 	DLLC,
 	DSNDCP,
+	DSLHC,
 	DNAT,
 	DCTRL,
 	DSMPP,
diff --git a/openbsc/include/openbsc/slhc_vj.h b/openbsc/include/openbsc/slhc.h
similarity index 89%
rename from openbsc/include/openbsc/slhc_vj.h
rename to openbsc/include/openbsc/slhc.h
index 0a85dc0..2e926dd 100644
--- a/openbsc/include/openbsc/slhc_vj.h
+++ b/openbsc/include/openbsc/slhc.h
@@ -80,7 +80,6 @@
  * means "IP packet".
  */
 
-
 #include <linux/ip.h>
 #include <linux/tcp.h>
 
@@ -109,7 +108,7 @@
  * data type and sizes conversion assumptions:
  *
  *	VJ code		KA9Q style	generic
- *	u_char		byte_t		unsigned char	 8 bits
+ *	u_char		byte_t		uint8_t	 8 bits
  *	u_short		int16		unsigned short	16 bits
  *	u_int		int16		unsigned short	16 bits
  *	u_long		unsigned long	unsigned long	32 bits
@@ -130,8 +129,8 @@
 	struct cstate *next;	/* next in ring (xmit) */
 	struct iphdr cs_ip;	/* ip/tcp hdr from most recent packet */
 	struct tcphdr cs_tcp;
-	unsigned char cs_ipopt[64];
-	unsigned char cs_tcpopt[64];
+	uint8_t cs_ipopt[64];
+	uint8_t cs_tcpopt[64];
 	int cs_hsize;
 };
 #define NULLSLSTATE	(struct cstate *)0
@@ -173,19 +172,16 @@
 #define __ARGS(x) x
 
 /* In slhc.c: */
-struct slcompress *slhc_init __ARGS((int rslots, int tslots));
-void slhc_free __ARGS((struct slcompress *comp));
+struct slcompress *slhc_init(int rslots, int tslots);
 
-int slhc_compress __ARGS((struct slcompress *comp, unsigned char *icp,
-			  int isize, unsigned char *ocp, unsigned char **cpp,
-			  int compress_cid));
-int slhc_uncompress __ARGS((struct slcompress *comp, unsigned char *icp,
-			    int isize));
-int slhc_remember __ARGS((struct slcompress *comp, unsigned char *icp,
-			  int isize));
-int slhc_toss __ARGS((struct slcompress *comp));
+void slhc_free(struct slcompress *comp);
 
-void slhc_i_status __ARGS((struct slcompress *comp));
-void slhc_o_status __ARGS((struct slcompress *comp));
+int slhc_compress(struct slcompress *comp, uint8_t *icp, int isize, uint8_t *ocp, uint8_t **cpp, int compress_cid);
+int slhc_uncompress(struct slcompress *comp, uint8_t *icp, int isize);
+int slhc_remember(struct slcompress *comp, uint8_t *icp, int isize);
+int slhc_toss(struct slcompress *comp);
+
+void slhc_i_status(struct slcompress *comp);
+void slhc_o_status(struct slcompress *comp);
 
 #endif	/* _SLHC_H */
diff --git a/openbsc/src/gprs/Makefile.am b/openbsc/src/gprs/Makefile.am
index 6dc7e16..548b38c 100644
--- a/openbsc/src/gprs/Makefile.am
+++ b/openbsc/src/gprs/Makefile.am
@@ -23,6 +23,7 @@
 			$(OSMO_LIBS) $(LIBCRYPTO_LIBS) -lrt
 
 osmo_sgsn_SOURCES =	gprs_gmm.c gprs_sgsn.c gprs_sndcp.c gprs_sndcp_vty.c \
+			slhc.c \
 			sgsn_main.c sgsn_vty.c sgsn_libgtp.c \
 			gprs_llc.c gprs_llc_parse.c gprs_llc_vty.c crc24.c \
 			sgsn_ctrl.c sgsn_auth.c gprs_subscriber.c \
diff --git a/openbsc/src/gprs/slhc.c b/openbsc/src/gprs/slhc.c
index b1a855c..b201ddb 100644
--- a/openbsc/src/gprs/slhc.c
+++ b/openbsc/src/gprs/slhc.c
@@ -50,62 +50,71 @@
  *	driver code belonging close to PPP and SLIP
  */
 
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <net/slhc_vj.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdint.h>
+#include <arpa/inet.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/talloc.h>
+#include <openbsc/slhc.h>
+#include <openbsc/debug.h>
 
-#ifdef CONFIG_INET
-/* Entire module is for IP only */
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/socket.h>
-#include <linux/sockios.h>
-#include <linux/termios.h>
-#include <linux/in.h>
-#include <linux/fcntl.h>
-#include <linux/inet.h>
-#include <linux/netdevice.h>
-#include <net/ip.h>
-#include <net/protocol.h>
-#include <net/icmp.h>
-#include <net/tcp.h>
-#include <linux/skbuff.h>
-#include <net/sock.h>
-#include <linux/timer.h>
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <net/checksum.h>
-#include <asm/unaligned.h>
+static uint8_t *encode(uint8_t *cp, uint16_t n);
+static long decode(uint8_t **cpp);
+static uint8_t * put16(uint8_t *cp, uint16_t x);
+static uint16_t pull16(uint8_t **cpp);
 
-static unsigned char *encode(unsigned char *cp, unsigned short n);
-static long decode(unsigned char **cpp);
-static unsigned char * put16(unsigned char *cp, unsigned short x);
-static unsigned short pull16(unsigned char **cpp);
+
+/* Replacement for kernel space function ip_fast_csum() */
+static uint16_t ip_fast_csum(uint8_t *iph, int ihl)
+{
+	int i;
+	uint16_t temp;
+	uint32_t accumulator = 0xFFFF;
+
+	for(i=0;i<ihl*2;i++)
+	{
+		temp = ((*iph) << 8)&0xFF00;
+		iph++;
+		temp |= (*iph)&0xFF;
+		iph++;
+
+		accumulator+=temp;
+		if(accumulator>0xFFFF)
+		{
+			accumulator++;
+			accumulator&=0xFFFF;
+		}
+	}
+
+    return (uint16_t)(htons(~accumulator)&0xFFFF);
+}
+
+/* Replacement for kernel space function put_unaligned() */
+static void put_unaligned(uint16_t val, void *ptr)
+{
+	memcpy(ptr,&val,sizeof(val));
+}
+
 
 /* Initialize compression data structure
  *	slots must be in range 0 to 255 (zero meaning no compression)
  */
-struct slcompress *
-slhc_init(int rslots, int tslots)
+struct slcompress *slhc_init(int rslots, int tslots)
 {
 	register short i;
 	register struct cstate *ts;
 	struct slcompress *comp;
 
-	MOD_INC_USE_COUNT;
-	comp = (struct slcompress *)kmalloc(sizeof(struct slcompress),
-					    GFP_KERNEL);
+	comp = (struct slcompress *)talloc_zero_size(NULL,sizeof(struct slcompress));
 	if (! comp)
 		goto out_fail;
 	memset(comp, 0, sizeof(struct slcompress));
 
 	if ( rslots > 0  &&  rslots < 256 ) {
 		size_t rsize = rslots * sizeof(struct cstate);
-		comp->rstate = (struct cstate *) kmalloc(rsize, GFP_KERNEL);
+		comp->rstate = (struct cstate *) talloc_zero_size(NULL, rsize);
 		if (! comp->rstate)
 			goto out_free;
 		memset(comp->rstate, 0, rsize);
@@ -114,7 +123,7 @@
 
 	if ( tslots > 0  &&  tslots < 256 ) {
 		size_t tsize = tslots * sizeof(struct cstate);
-		comp->tstate = (struct cstate *) kmalloc(tsize, GFP_KERNEL);
+		comp->tstate = (struct cstate *) talloc_zero_size(NULL, tsize);
 		if (! comp->tstate)
 			goto out_free2;
 		memset(comp->tstate, 0, tsize);
@@ -144,36 +153,34 @@
 	return comp;
 
 out_free2:
-	kfree((unsigned char *)comp->rstate);
+	talloc_free((uint8_t *)comp->rstate);
 out_free:
-	kfree((unsigned char *)comp);
+	talloc_free((uint8_t *)comp);
 out_fail:
-	MOD_DEC_USE_COUNT;
+
+
 	return NULL;
 }
 
-
 /* Free a compression data structure */
-void
-slhc_free(struct slcompress *comp)
+void slhc_free(struct slcompress *comp)
 {
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_free(): Freeing compression states...\n");
+
 	if ( comp == NULLSLCOMPR )
 		return;
 
 	if ( comp->tstate != NULLSLSTATE )
-		kfree( comp->tstate );
+		talloc_free(comp->tstate );
 
 	if ( comp->rstate != NULLSLSTATE )
-		kfree( comp->rstate );
+		talloc_free( comp->rstate );
 
-	kfree( comp );
-	MOD_DEC_USE_COUNT;
+	talloc_free( comp );
 }
 
-
 /* Put a short in host order into a char array in network order */
-static inline unsigned char *
-put16(unsigned char *cp, unsigned short x)
+static inline uint8_t *put16(uint8_t *cp, uint16_t x)
 {
 	*cp++ = x >> 8;
 	*cp++ = x;
@@ -183,8 +190,7 @@
 
 
 /* Encode a number */
-unsigned char *
-encode(unsigned char *cp, unsigned short n)
+uint8_t *encode(uint8_t *cp, uint16_t n)
 {
 	if(n >= 256 || n == 0){
 		*cp++ = 0;
@@ -196,8 +202,7 @@
 }
 
 /* Pull a 16-bit integer in host order from buffer in network byte order */
-static unsigned short
-pull16(unsigned char **cpp)
+static uint16_t pull16(uint8_t **cpp)
 {
 	short rval;
 
@@ -208,8 +213,7 @@
 }
 
 /* Decode a number */
-long
-decode(unsigned char **cpp)
+long decode(uint8_t **cpp)
 {
 	register int x;
 
@@ -228,9 +232,7 @@
  *    change it to ocp.
  */
 
-int
-slhc_compress(struct slcompress *comp, unsigned char *icp, int isize,
-	unsigned char *ocp, unsigned char **cpp, int compress_cid)
+int slhc_compress(struct slcompress *comp, uint8_t *icp, int isize, uint8_t *ocp, uint8_t **cpp, int compress_cid)
 {
 	register struct cstate *ocs = &(comp->tstate[comp->xmit_oldest]);
 	register struct cstate *lcs = ocs;
@@ -238,11 +240,10 @@
 	register unsigned long deltaS, deltaA;
 	register short changes = 0;
 	int hlen;
-	unsigned char new_seq[16];
-	register unsigned char *cp = new_seq;
+	uint8_t new_seq[16];
+	register uint8_t *cp = new_seq;
 	struct iphdr *ip;
 	struct tcphdr *th, *oth;
-
 
 	/*
 	 *	Don't play with runt packets.
@@ -260,11 +261,12 @@
 			comp->sls_o_nontcp++;
 		else
 			comp->sls_o_tcp++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Not a TCP packat, will not touch...\n");
 		return isize;
 	}
-	/* Extract TCP header */
 
-	th = (struct tcphdr *)(((unsigned char *)ip) + ip->ihl*4);
+	/* Extract TCP header */
+	th = (struct tcphdr *)(((uint8_t *)ip) + ip->ihl*4);
 	hlen = ip->ihl*4 + th->doff*4;
 
 	/*  Bail if the TCP packet isn't `compressible' (i.e., ACK isn't set or
@@ -275,8 +277,10 @@
 	    ! (th->ack)){
 		/* TCP connection stuff; send as regular IP */
 		comp->sls_o_tcp++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Packet is part of a TCP connection, will not touch...\n");
 		return isize;
 	}
+
 	/*
 	 * Packet is compressible -- we're going to send either a
 	 * COMPRESSED_TCP or UNCOMPRESSED_TCP packet.  Either way,
@@ -291,6 +295,9 @@
 	 * states via linear search.  If we don't find a state
 	 * for the datagram, the oldest state is (re-)used.
 	 */
+
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Compressible packet detected!\n");
+
 	for ( ; ; ) {
 		if( ip->saddr == cs->cs_ip.saddr
 		 && ip->daddr == cs->cs_ip.daddr
@@ -314,11 +321,14 @@
 	 * state points to the newest and we only need to set
 	 * xmit_oldest to update the lru linkage.
 	 */
+
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Header not yet seen, will memorize header for the next turn...\n");
 	comp->sls_o_misses++;
 	comp->xmit_oldest = lcs->cs_this;
 	goto uncompressed;
 
 found:
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Header already seen, trying to compress...\n");
 	/*
 	 * Found it -- move to the front on the connection list.
 	 */
@@ -348,6 +358,7 @@
 	 */
 	oth = &cs->cs_tcp;
 
+
 	if(ip->version != cs->cs_ip.version || ip->ihl != cs->cs_ip.ihl
 	 || ip->tos != cs->cs_ip.tos
 	 || (ip->frag_off & htons(0x4000)) != (cs->cs_ip.frag_off & htons(0x4000))
@@ -355,6 +366,7 @@
 	 || th->doff != cs->cs_tcp.doff
 	 || (ip->ihl > 5 && memcmp(ip+1,cs->cs_ipopt,((ip->ihl)-5)*4) != 0)
 	 || (th->doff > 5 && memcmp(th+1,cs->cs_tcpopt,((th->doff)-5)*4) != 0)){
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): The header contains unexpected changes, can't compress...\n");
 		goto uncompressed;
 	}
 
@@ -373,6 +385,7 @@
 		 * implementation should never do this but RFC793
 		 * doesn't prohibit the change so we have to deal
 		 * with it. */
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): URG not set but urp changed, can't compress...\n");
 		goto uncompressed;
 	}
 	if((deltaS = ntohs(th->window) - ntohs(oth->window)) != 0){
@@ -381,13 +394,19 @@
 	}
 	if((deltaA = ntohl(th->ack_seq) - ntohl(oth->ack_seq)) != 0L){
 		if(deltaA > 0x0000ffff)
+		{
+			LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): (deltaA = ntohl(th->ack_seq) - ntohl(oth->ack_seq)) != 0L, can't compress...\n");
 			goto uncompressed;
+		}
 		cp = encode(cp,deltaA);
 		changes |= NEW_A;
 	}
 	if((deltaS = ntohl(th->seq) - ntohl(oth->seq)) != 0L){
 		if(deltaS > 0x0000ffff)
+		{
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): (deltaS = ntohl(th->seq) - ntohl(oth->seq)) != 0L, can't compress...\n");
 			goto uncompressed;
+		}
 		cp = encode(cp,deltaS);
 		changes |= NEW_S;
 	}
@@ -403,6 +422,7 @@
 		if(ip->tot_len != cs->cs_ip.tot_len &&
 		   ntohs(cs->cs_ip.tot_len) == hlen)
 			break;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Retransmitted packet detected, can't compress...\n");
 		goto uncompressed;
 		break;
 	case SPECIAL_I:
@@ -410,6 +430,7 @@
 		/* actual changes match one of our special case encodings --
 		 * send packet uncompressed.
 		 */
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Special case detected, can't compress...\n");
 		goto uncompressed;
 	case NEW_S|NEW_A:
 		if(deltaS == deltaA &&
@@ -438,7 +459,6 @@
 	 * state with this packet's header.
 	 */
 	deltaA = ntohs(th->check);
-	memcpy(&cs->cs_ip,ip,20);
 	memcpy(&cs->cs_tcp,th,20);
 	/* We want to use the original packet as our compressed packet.
 	 * (cp - new_seq) is the number of bytes we need for compressed
@@ -471,6 +491,7 @@
 	 * to use on future compressed packets in the protocol field).
 	 */
 uncompressed:
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_compress(): Packet will be sent uncompressed...\n");
 	memcpy(&cs->cs_ip,ip,20);
 	memcpy(&cs->cs_tcp,th,20);
 	if (ip->ihl > 5)
@@ -487,8 +508,7 @@
 }
 
 
-int
-slhc_uncompress(struct slcompress *comp, unsigned char *icp, int isize)
+int slhc_uncompress(struct slcompress *comp, uint8_t *icp, int isize)
 {
 	register int changes;
 	long x;
@@ -496,7 +516,7 @@
 	register struct iphdr *ip;
 	register struct cstate *cs;
 	int len, hdrlen;
-	unsigned char *cp = icp;
+	uint8_t *cp = icp;
 
 	/* We've got a compressed packet; read the change byte */
 	comp->sls_i_compressed++;
@@ -544,6 +564,8 @@
 
 	switch(changes & SPECIALS_MASK){
 	case SPECIAL_I:		/* Echoed terminal traffic */
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_uncompress(): Echoed terminal traffic detected\n");
+
 		{
 		register short i;
 		i = ntohs(ip->tot_len) - hdrlen;
@@ -553,11 +575,13 @@
 		break;
 
 	case SPECIAL_D:			/* Unidirectional data */
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_uncompress(): Unidirectional data detected\n");
 		thp->seq = htonl( ntohl(thp->seq) +
 				  ntohs(ip->tot_len) - hdrlen);
 		break;
 
 	default:
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_uncompress(): default packet type detected\n");
 		if(changes & NEW_U){
 			thp->urg = 1;
 			if((x = decode(&cp)) == -1) {
@@ -607,6 +631,7 @@
 	ip->tot_len = htons(len);
 	ip->check = 0;
 
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_uncompress(): making space for the reconstructed header...\n");
 	memmove(icp + hdrlen, cp, len - hdrlen);
 
 	cp = icp;
@@ -618,8 +643,7 @@
 	  cp += (ip->ihl - 5) * 4;
 	}
 
-	put_unaligned(ip_fast_csum(icp, ip->ihl),
-		      &((struct iphdr *)icp)->check);
+	put_unaligned(ip_fast_csum(icp, ip->ihl),     &((struct iphdr *)icp)->check);
 
 	memcpy(cp, thp, 20);
 	cp += 20;
@@ -631,22 +655,24 @@
 
 	return len;
 bad:
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_uncompress(): bad packet detected!\n");
 	comp->sls_i_error++;
 	return slhc_toss( comp );
 }
 
 
-int
-slhc_remember(struct slcompress *comp, unsigned char *icp, int isize)
+int slhc_remember(struct slcompress *comp, uint8_t *icp, int isize)
 {
 	register struct cstate *cs;
 	unsigned ihl;
 
-	unsigned char index;
+	uint8_t index;
+	uint16_t checksum;
 
 	if(isize < 20) {
 		/* The packet is shorter than a legal IP header */
 		comp->sls_i_runt++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_remember(): The packet is shorter than a legal IP header ==> slhc_toss()\n");
 		return slhc_toss( comp );
 	}
 	/* Peek at the IP header's IHL field to find its length */
@@ -654,18 +680,23 @@
 	if(ihl < 20 / 4){
 		/* The IP header length field is too small */
 		comp->sls_i_runt++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_remember(): The IP header length field is too small ==> slhc_toss()\n");
 		return slhc_toss( comp );
 	}
+
 	index = icp[9];
 	icp[9] = IPPROTO_TCP;
+	checksum = ip_fast_csum(icp, ihl);
 
-	if (ip_fast_csum(icp, ihl)) {
+	if (checksum) {
 		/* Bad IP header checksum; discard */
 		comp->sls_i_badcheck++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_remember(): Bad IP header checksum; discard ==> slhc_toss()\n");
 		return slhc_toss( comp );
 	}
 	if(index > comp->rslot_limit) {
 		comp->sls_i_error++;
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_remember(): index > comp->rslot_limit ==> slhc_toss()\n");
 		return slhc_toss(comp);
 	}
 
@@ -686,10 +717,9 @@
 	return isize;
 }
 
-
-int
-slhc_toss(struct slcompress *comp)
+int slhc_toss(struct slcompress *comp)
 {
+	LOGP(DSLHC, LOGL_DEBUG, "slhc_toss(): Reset compression state...\n");
 	if ( comp == NULLSLCOMPR )
 		return 0;
 
@@ -697,11 +727,10 @@
 	return 0;
 }
 
-
 void slhc_i_status(struct slcompress *comp)
 {
 	if (comp != NULLSLCOMPR) {
-		printk("\t%d Cmp, %d Uncmp, %d Bad, %d Tossed\n",
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_i_status(): %d Cmp, %d Uncmp, %d Bad, %d Tossed\n",
 			comp->sls_i_compressed,
 			comp->sls_i_uncompressed,
 			comp->sls_i_error,
@@ -709,92 +738,16 @@
 	}
 }
 
-
 void slhc_o_status(struct slcompress *comp)
 {
 	if (comp != NULLSLCOMPR) {
-		printk("\t%d Cmp, %d Uncmp, %d AsIs, %d NotTCP\n",
+		LOGP(DSLHC, LOGL_DEBUG, "slhc_o_status(): %d Cmp, %d Uncmp, %d AsIs, %d NotTCP %d Searches, %d Misses\n",
 			comp->sls_o_compressed,
 			comp->sls_o_uncompressed,
 			comp->sls_o_tcp,
-			comp->sls_o_nontcp);
-		printk("\t%10d Searches, %10d Misses\n",
+			comp->sls_o_nontcp,
 			comp->sls_o_searches,
 			comp->sls_o_misses);
 	}
 }
 
-/* Should this be surrounded with "#ifdef CONFIG_MODULES" ? */
-/* VJ header compression */
-EXPORT_SYMBOL(slhc_init);
-EXPORT_SYMBOL(slhc_free);
-EXPORT_SYMBOL(slhc_remember);
-EXPORT_SYMBOL(slhc_compress);
-EXPORT_SYMBOL(slhc_uncompress);
-EXPORT_SYMBOL(slhc_toss);
-
-#ifdef MODULE
-
-int init_module(void)
-{
-	printk(KERN_INFO "CSLIP: code copyright 1989 Regents of the University of California\n");
-	return 0;
-}
-
-void cleanup_module(void)
-{
-	return;
-}
-
-#endif /* MODULE */
-#else /* CONFIG_INET */
-
-
-int
-slhc_toss(struct slcompress *comp)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_toss");
-  return -EINVAL;
-}
-int
-slhc_uncompress(struct slcompress *comp, unsigned char *icp, int isize)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_uncompress");
-  return -EINVAL;
-}
-int
-slhc_compress(struct slcompress *comp, unsigned char *icp, int isize,
-	unsigned char *ocp, unsigned char **cpp, int compress_cid)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_compress");
-  return -EINVAL;
-}
-
-int
-slhc_remember(struct slcompress *comp, unsigned char *icp, int isize)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_remember");
-  return -EINVAL;
-}
-
-void
-slhc_free(struct slcompress *comp)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_free");
-  return;
-}
-struct slcompress *
-slhc_init(int rslots, int tslots)
-{
-  printk(KERN_DEBUG "Called IP function on non IP-system: slhc_init");
-  return NULL;
-}
-EXPORT_SYMBOL(slhc_init);
-EXPORT_SYMBOL(slhc_free);
-EXPORT_SYMBOL(slhc_remember);
-EXPORT_SYMBOL(slhc_compress);
-EXPORT_SYMBOL(slhc_uncompress);
-EXPORT_SYMBOL(slhc_toss);
-
-#endif /* CONFIG_INET */
-MODULE_LICENSE("Dual BSD/GPL");

-- 
To view, visit https://gerrit.osmocom.org/635
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I7a638e88a43b3eb9d006751a03ef2570e36613f0
Gerrit-PatchSet: 3
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list