linux/crypto/deflate.c
<<
2 /spapti /formti a 2 href="../linux+vv3.1.1/crypto/deflate.c"> 2 img src="../.static/gfx/right.png" alt=">>"> /spapti spap class="lxr_search"> 2 2 input typ hidden" nam navtarget" io2 "> 2 input typ text" nam search" id search"> 2 buttopttyp submit">Search 2 Prefsi /a> /spapti 2 /divti 2 form ac input typ hidden" nam ajax_lookup" id ajax_lookup" io2 "> 2 /formti 2 div class="headingbottom">i div id file_contents"t
   1 /a> spap class="comment">/* /spapti   2 /a> spap class="comment"> * Cryptographic API. /spapti   3 /a> spap class="comment"> * /spapti   4 /a> spap class="comment"> * Deflate algorithm (RFC 1951), implemented here primarily for use /spapti   5 /a> spap class="comment"> * by IPCOMP (RFC 3173 & RFC 2394). /spapti   6 /a> spap class="comment"> * /spapti   7 /a> spap class="comment"> * Copyright (c) 2003 Jam s Morris <jmorris@intercode.com.au> /spapti   8 /a> spap class="comment"> * /spapti   9 /a> spap class="comment"> * This program is free software; you cap redistribute it and/or modify it /spapti  .10.a> spap class="comment"> * under the terms of the GNU General Public License as published by the Free /spapti  11 /a> spap class="comment"> * Software Founda  12 /a> spap class="comment"> * any later vers  13 /a> spap class="comment"> * /spapti  14 /a> spap class="comment"> * FIXME: deflate transforms will require up to a total of about 436k of kernel /spapti  15 /a> spap class="comment"> * memory on i386 (390k for compress  16 /a> spap class="comment"> * current zlib kernel code uses a worst case pre-alloca  17 /a> spap class="comment"> * This needs to be fixed so that the amount of memory required is properly /spapti  18 /a> spap class="comment"> * related to the  winbits and memlevel parameters. /spapti  19 /a> spap class="comment"> * /spapti  210.a> spap class="comment"> * The default winbits of 11 should suit most packets, and it may be something /spapti  21 /a> spap class="comment"> * to configure op a per-tfm basis in the future. /spapti  22 /a> spap class="comment"> * /spapti  23 /a> spap class="comment"> * Currently, compress  24 /a> spap class="comment"> * it is not needed for IPCOMP and keeps the code simpler.  It cap be /spapti  25 /a> spap class="comment"> * implemented if someone wants it. /spapti  26 /a> spap class="comment"> */ /spapti  27 /a>#include <linux/init.h /a>>i  28 /a>#include <linux/module.h /a>>i  29 /a>#include <linux/crypto.h /a>>i  30 /a>#include <linux/zlib.h /a>>i  31 /a>#include <linux/vmalloc.h /a>>i  32 /a>#include <linux/interrupt.h /a>>i  33 /a>#include <linux/mm.h /a>>i  34 /a>#include <linux/net.h /a>>i  35 /a>i  36 /a>#define  a href="+code=DEFLATE_DEF_LEVEL" class="sref">DEFLATE_DEF_LEVEL /a>                a href="+code=Z_DEFAULT_COMPRESSION" class="sref">Z_DEFAULT_COMPRESSION /a>i  37 /a>#define  a href="+code=DEFLATE_DEF_WINBITS" class="sref">DEFLATE_DEF_WINBITS /a>             11i  38 /a>#define  a href="+code=DEFLATE_DEF_MEMLEVEL" class="sref">DEFLATE_DEF_MEMLEVEL /a>             a href="+code=MAX_MEM_LEVEL" class="sref">MAX_MEM_LEVEL /a>i  39 /a>i  40 /a>struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> {i  41 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a>  a href="+code=comp_stream" class="sref">comp_stream /a>;i  42 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a>  a href="+code=decomp_stream" class="sref">decomp_stream /a>;i  43 /a>};i  44 /a>i  45 /a>static int  a href="+code=deflate_comp_init" class="sref">deflate_comp_init /a>(struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a>)i  46 /a>{i  47 /a>        int  a href="+code=ret" class="sref">ret /a> = 0;i  48 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a> * a href="+code=stream" class="sref">stream /a> = & a href="+code=ctx" class="sref">ctx /a>-> a href="+code=comp_stream" class="sref">comp_stream /a>;i  49 /a>i  50 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a> =  a href="+code=vzalloc" class="sref">vzalloc /a>( a href="+code=zlib_deflate_workspacesize" class="sref">zlib_deflate_workspacesize /a>(i  51 /a>                                - a href="+code=DEFLATE_DEF_WINBITS" class="sref">DEFLATE_DEF_WINBITS /a>,  a href="+code=DEFLATE_DEF_MEMLEVEL" class="sref">DEFLATE_DEF_MEMLEVEL /a>));i  52 /a>        if (! a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a>) {i  53 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=ENOMEM" class="sref">ENOMEM /a>;i  54 /a>                goto  a href="+code=out" class="sref">out /a>;i  55 /a>        }i  56 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_deflateInit2" class="sref">zlib_deflateInit2 /a>( a href="+code=stream" class="sref">stream /a>,  a href="+code=DEFLATE_DEF_LEVEL" class="sref">DEFLATE_DEF_LEVEL /a>,  a href="+code=Z_DEFLATED" class="sref">Z_DEFLATED /a>,i  57 /a>                                - a href="+code=DEFLATE_DEF_WINBITS" class="sref">DEFLATE_DEF_WINBITS /a>,  a href="+code=DEFLATE_DEF_MEMLEVEL" class="sref">DEFLATE_DEF_MEMLEVEL /a>,i  58 /a>                                 a href="+code=Z_DEFAULT_STRATEGY" class="sref">Z_DEFAULT_STRATEGY /a>);i  59 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_OK" class="sref">Z_OK /a>) {i  60 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i  61 /a>                goto  a href="+code=out_free" class="sref">out_free /a>;i  62 /a>        }i  63 /a> a href="+code=out" class="sref">out /a>:i  64 /a>        return  a href="+code=ret" class="sref">ret /a>;i  65 /a> a href="+code=out_free" class="sref">out_free /a>:i  66 /a>         a href="+code=vfree" class="sref">vfree /a>( a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a>);i  67 /a>        goto  a href="+code=out" class="sref">out /a>;i  68 /a>}i  69 /a>i  70 /a>static int  a href="+code=deflate_decomp_init" class="sref">deflate_decomp_init /a>(struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a>)i  71 /a>{i  72 /a>        int  a href="+code=ret" class="sref">ret /a> = 0;i  73 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a> * a href="+code=stream" class="sref">stream /a> = & a href="+code=ctx" class="sref">ctx /a>-> a href="+code=decomp_stream" class="sref">decomp_stream /a>;i  74 /a>i  75 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a> =  a href="+code=vzalloc" class="sref">vzalloc /a>( a href="+code=zlib_inflate_workspacesize" class="sref">zlib_inflate_workspacesize /a>());i  76 /a>        if (! a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a>) {i  77 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=ENOMEM" class="sref">ENOMEM /a>;i  78 /a>                goto  a href="+code=out" class="sref">out /a>;i  79 /a>        }i  80 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_inflateInit2" class="sref">zlib_inflateInit2 /a>( a href="+code=stream" class="sref">stream /a>, - a href="+code=DEFLATE_DEF_WINBITS" class="sref">DEFLATE_DEF_WINBITS /a>);i  81 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_OK" class="sref">Z_OK /a>) {i  82 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i  83 /a>                goto  a href="+code=out_free" class="sref">out_free /a>;i  84 /a>        }i  85 /a> a href="+code=out" class="sref">out /a>:i  86 /a>        return  a href="+code=ret" class="sref">ret /a>;i  87 /a> a href="+code=out_free" class="sref">out_free /a>:i  88 /a>         a href="+code=vfree" class="sref">vfree /a>( a href="+code=stream" class="sref">stream /a>-> a href="+code=workspace" class="sref">workspace /a>);i  89 /a>        goto  a href="+code=out" class="sref">out /a>;i  90 /a>}i  91 /a>i  92 /a>static void  a href="+code=deflate_comp_exit" class="sref">deflate_comp_exit /a>(struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a>)i  93 /a>{i  94 /a>         a href="+code=zlib_deflateEnd" class="sref">zlib_deflateEnd /a>(& a href="+code=ctx" class="sref">ctx /a>-> a href="+code=comp_stream" class="sref">comp_stream /a>);i  95 /a>         a href="+code=vfree" class="sref">vfree /a>( a href="+code=ctx" class="sref">ctx /a>-> a href="+code=comp_stream" class="sref">comp_stream /a>. a href="+code=workspace" class="sref">workspace /a>);i  96 /a>}i  97 /a>i  98 /a>static void  a href="+code=deflate_decomp_exit" class="sref">deflate_decomp_exit /a>(struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a>)i  99 /a>{i 100 /a>         a href="+code=zlib_inflateEnd" class="sref">zlib_inflateEnd /a>(& a href="+code=ctx" class="sref">ctx /a>-> a href="+code=decomp_stream" class="sref">decomp_stream /a>);i 101 /a>         a href="+code=vfree" class="sref">vfree /a>( a href="+code=ctx" class="sref">ctx /a>-> a href="+code=decomp_stream" class="sref">decomp_stream /a>. a href="+code=workspace" class="sref">workspace /a>);i 102 /a>}i 103 /a>i 104 /a>static int  a href="+code=deflate_init" class="sref">deflate_init /a>(struct  a href="+code=crypto_tfm" class="sref">crypto_tfm /a> * a href="+code=tfm" class="sref">tfm /a>)i 105 /a>{i 106 /a>        struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a> =  a href="+code=crypto_tfm_ctx" class="sref">crypto_tfm_ctx /a>( a href="+code=tfm" class="sref">tfm /a>);i 107 /a>        int  a href="+code=ret" class="sref">ret /a>;i 108 /a>i 109 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=deflate_comp_init" class="sref">deflate_comp_init /a>( a href="+code=ctx" class="sref">ctx /a>);i 110 /a>        if ( a href="+code=ret" class="sref">ret /a>)i 111 /a>                goto  a href="+code=out" class="sref">out /a>;i 112 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=deflate_decomp_init" class="sref">deflate_decomp_init /a>( a href="+code=ctx" class="sref">ctx /a>);i 113 /a>        if ( a href="+code=ret" class="sref">ret /a>)i 114 /a>                 a href="+code=deflate_comp_exit" class="sref">deflate_comp_exit /a>( a href="+code=ctx" class="sref">ctx /a>);i 115 /a> a href="+code=out" class="sref">out /a>:i 116 /a>        return  a href="+code=ret" class="sref">ret /a>;i 117 /a>}i 118 /a>i 119 /a>static void  a href="+code=deflate_exit" class="sref">deflate_exit /a>(struct  a href="+code=crypto_tfm" class="sref">crypto_tfm /a> * a href="+code=tfm" class="sref">tfm /a>)i 1210.a>{i 121 /a>        struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=ctx" class="sref">ctx /a> =  a href="+code=crypto_tfm_ctx" class="sref">crypto_tfm_ctx /a>( a href="+code=tfm" class="sref">tfm /a>);i 122 /a>i 123 /a>         a href="+code=deflate_comp_exit" class="sref">deflate_comp_exit /a>( a href="+code=ctx" class="sref">ctx /a>);i 124 /a>         a href="+code=deflate_decomp_exit" class="sref">deflate_decomp_exit /a>( a href="+code=ctx" class="sref">ctx /a>);i 125 /a>}i 126 /a>i 127 /a>static int  a href="+code=deflate_compress" class="sref">deflate_compress /a>(struct  a href="+code=crypto_tfm" class="sref">crypto_tfm /a> * a href="+code=tfm" class="sref">tfm /a>, const  a href="+code=u8" class="sref">u8 /a> * a href="+code=src" class="sref">src /a>,i 128 /a>                            unsigned int  a href="+code=slen" class="sref">slen /a>,  a href="+code=u8" class="sref">u8 /a> * a href="+code=dst" class="sref">dst /a>, unsigned int * a href="+code=dlen" class="sref">dlen /a>)i 129 /a>{i 130 /a>        int  a href="+code=ret" class="sref">ret /a> = 0;i 131 /a>        struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=dctx" class="sref">dctx /a> =  a href="+code=crypto_tfm_ctx" class="sref">crypto_tfm_ctx /a>( a href="+code=tfm" class="sref">tfm /a>);i 132 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a> * a href="+code=stream" class="sref">stream /a> = & a href="+code=dctx" class="sref">dctx /a>-> a href="+code=comp_stream" class="sref">comp_stream /a>;i 133 /a>i 134 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_deflateReset" class="sref">zlib_deflateReset /a>( a href="+code=stream" class="sref">stream /a>);i 135 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_OK" class="sref">Z_OK /a>) {i 136 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i 137 /a>                goto  a href="+code=out" class="sref">out /a>;i 138 /a>        }i 139 /a>i 140 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=next_in" class="sref">next_in /a> = ( a href="+code=u8" class="sref">u8 /a> *) a href="+code=src" class="sref">src /a>;i 141 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_in" class="sref">avail_in /a> =  a href="+code=slen" class="sref">slen /a>;i 142 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=next_out" class="sref">next_out /a> = ( a href="+code=u8" class="sref">u8 /a> *) a href="+code=dst" class="sref">dst /a>;i 143 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_out" class="sref">avail_out /a> = * a href="+code=dlen" class="sref">dlen /a>;i 144 /a>i 145 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_deflate" class="sref">zlib_deflate /a>( a href="+code=stream" class="sref">stream /a>,  a href="+code=Z_FINISH" class="sref">Z_FINISH /a>);i 146 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_STREAM_END" class="sref">Z_STREAM_END /a>) {i 147 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i 148 /a>                goto  a href="+code=out" class="sref">out /a>;i 149 /a>        }i 150 /a>         a href="+code=ret" class="sref">ret /a> = 0;i 151 /a>        * a href="+code=dlen" class="sref">dlen /a> =  a href="+code=stream" class="sref">stream /a>-> a href="+code=total_out" class="sref">total_out /a>;i 152 /a> a href="+code=out" class="sref">out /a>:i 153 /a>        return  a href="+code=ret" class="sref">ret /a>;i 154 /a>}i 155 /a>i 156 /a>static int  a href="+code=deflate_decompress" class="sref">deflate_decompress /a>(struct  a href="+code=crypto_tfm" class="sref">crypto_tfm /a> * a href="+code=tfm" class="sref">tfm /a>, const  a href="+code=u8" class="sref">u8 /a> * a href="+code=src" class="sref">src /a>,i 157 /a>                              unsigned int  a href="+code=slen" class="sref">slen /a>,  a href="+code=u8" class="sref">u8 /a> * a href="+code=dst" class="sref">dst /a>, unsigned int * a href="+code=dlen" class="sref">dlen /a>)i 158 /a>{i 159 /a>i 160 /a>        int  a href="+code=ret" class="sref">ret /a> = 0;i 161 /a>        struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a> * a href="+code=dctx" class="sref">dctx /a> =  a href="+code=crypto_tfm_ctx" class="sref">crypto_tfm_ctx /a>( a href="+code=tfm" class="sref">tfm /a>);i 162 /a>        struct  a href="+code=z_stream_s" class="sref">z_stream_s /a> * a href="+code=stream" class="sref">stream /a> = & a href="+code=dctx" class="sref">dctx /a>-> a href="+code=decomp_stream" class="sref">decomp_stream /a>;i 163 /a>i 164 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_inflateReset" class="sref">zlib_inflateReset /a>( a href="+code=stream" class="sref">stream /a>);i 165 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_OK" class="sref">Z_OK /a>) {i 166 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i 167 /a>                goto  a href="+code=out" class="sref">out /a>;i 168 /a>        }i 169 /a>i 170 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=next_in" class="sref">next_in /a> = ( a href="+code=u8" class="sref">u8 /a> *) a href="+code=src" class="sref">src /a>;i 171 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_in" class="sref">avail_in /a> =  a href="+code=slen" class="sref">slen /a>;i 172 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=next_out" class="sref">next_out /a> = ( a href="+code=u8" class="sref">u8 /a> *) a href="+code=dst" class="sref">dst /a>;i 173 /a>         a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_out" class="sref">avail_out /a> = * a href="+code=dlen" class="sref">dlen /a>;i 174 /a>i 175 /a>         a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_inflate" class="sref">zlib_inflate /a>( a href="+code=stream" class="sref">stream /a>,  a href="+code=Z_SYNC_FLUSH" class="sref">Z_SYNC_FLUSH /a>);i 176 /a>         spap class="comment">/* /spapti 177 /a> spap class="comment">         * Work around a bug in zlib, which sometim s wants to taste an extra /spapti 178 /a> spap class="comment">         * byte whep being used in the (undocumented) raw deflate mode. /spapti 179 /a> spap class="comment">         * (From USAGI). /spapti 1810.a> spap class="comment">         */ /spapti 181 /a>        if ( a href="+code=ret" class="sref">ret /a> ==  a href="+code=Z_OK" class="sref">Z_OK /a> && ! a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_in" class="sref">avail_in /a> &&  a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_out" class="sref">avail_out /a>) {i 182 /a>                 a href="+code=u8" class="sref">u8 /a>  a href="+code=zerostuff" class="sref">zerostuff /a> = 0;i 183 /a>                 a href="+code=stream" class="sref">stream /a>-> a href="+code=next_in" class="sref">next_in /a> = & a href="+code=zerostuff" class="sref">zerostuff /a>;i 184 /a>                 a href="+code=stream" class="sref">stream /a>-> a href="+code=avail_in" class="sref">avail_in /a> = 1;i 185 /a>                 a href="+code=ret" class="sref">ret /a> =  a href="+code=zlib_inflate" class="sref">zlib_inflate /a>( a href="+code=stream" class="sref">stream /a>,  a href="+code=Z_FINISH" class="sref">Z_FINISH /a>);i 186 /a>        }i 187 /a>        if ( a href="+code=ret" class="sref">ret /a> !=  a href="+code=Z_STREAM_END" class="sref">Z_STREAM_END /a>) {i 188 /a>                 a href="+code=ret" class="sref">ret /a> = - a href="+code=EINVAL" class="sref">EINVAL /a>;i 189 /a>                goto  a href="+code=out" class="sref">out /a>;i 190 /a>        }i 191 /a>         a href="+code=ret" class="sref">ret /a> = 0;i 192 /a>        * a href="+code=dlen" class="sref">dlen /a> =  a href="+code=stream" class="sref">stream /a>-> a href="+code=total_out" class="sref">total_out /a>;i 193 /a> a href="+code=out" class="sref">out /a>:i 194 /a>        return  a href="+code=ret" class="sref">ret /a>;i 195 /a>}i 196 /a>i 197 /a>static struct  a href="+code=crypto_alg" class="sref">crypto_alg /a>  a href="+code=alg" class="sref">alg /a> = {i 198 /a>        . a href="+code=cra_nam " class="sref">cra_nam  /a>               =  spap class="string">"deflate" /spapt,i 199 /a>        . a href="+code=cra_flags" class="sref">cra_flags /a>              =  a href="+code=CRYPTO_ALG_TYPE_COMPRESS" class="sref">CRYPTO_ALG_TYPE_COMPRESS /a>,i 200 /a>        . a href="+code=cra_ctxsize" class="sref">cra_ctxsize /a>            = sizeof(struct  a href="+code=deflate_ctx" class="sref">deflate_ctx /a>),i 201 /a>        . a href="+code=cra_module" class="sref">cra_module /a>             =  a href="+code=THIS_MODULE" class="sref">THIS_MODULE /a>,i 202 /a>        . a href="+code=cra_init" class="sref">cra_init /a>               =  a href="+code=deflate_init" class="sref">deflate_init /a>,i 203 /a>        . a href="+code=cra_exit" class="sref">cra_exit /a>               =  a href="+code=deflate_exit" class="sref">deflate_exit /a>,i 204 /a>        . a href="+code=cra_u" class="sref">cra_u /a>                  = { . a href="+code=compress" class="sref">compress /a> = {i 205 /a>        . a href="+code=coa_compress" class="sref">coa_compress /a>           =  a href="+code=deflate_compress" class="sref">deflate_compress /a>,i 206 /a>        . a href="+code=coa_decompress" class="sref">coa_decompress /a>         =  a href="+code=deflate_decompress" class="sref">deflate_decompress /a> } }i 207 /a>};i 208 /a>i 209 /a>static int  a href="+code=__init" class="sref">__init /a>  a href="+code=deflate_mod_init" class="sref">deflate_mod_init /a>(void)i 2110.a>{i 211 /a>        return  a href="+code=crypto_register_alg" class="sref">crypto_register_alg /a>(& a href="+code=alg" class="sref">alg /a>);i 212 /a>}i 213 /a>i 214 /a>static void  a href="+code=__exit" class="sref">__exit /a>  a href="+code=deflate_mod_fini" class="sref">deflate_mod_fini /a>(void)i 215 /a>{i 216 /a>         a href="+code=crypto_unregister_alg" class="sref">crypto_unregister_alg /a>(& a href="+code=alg" class="sref">alg /a>);i 217 /a>}i 218 /a>i 219 /a> a href="+code=module_init" class="sref">module_init /a>( a href="+code=deflate_mod_init" class="sref">deflate_mod_init /a>);i 2210.a> a href="+code=module_exit" class="sref">module_exit /a>( a href="+code=deflate_mod_fini" class="sref">deflate_mod_fini /a>);i 221 /a>i 222 /a> a href="+code=MODULE_LICENSE" class="sref">MODULE_LICENSE /a>( spap class="string">"GPL" /spapt);i 223 /a> a href="+code=MODULE_DESCRIPTION" class="sref">MODULE_DESCRIPTION /a>( spap class="string">"Deflate Compression Algorithm for IPCOMP" /spapt);i 224 /a> a href="+code=MODULE_AUTHOR" class="sref">MODULE_AUTHOR /a>( spap class="string">"Jam s Morris <jmorris@intercode.com.au>" /spapt);i 225 /a>i 226 /a>
lxr.linux.no kindly hosted by Redpill Linpro AS /a>, provider of Linux consulting and operations servic s since 1995.