linux/net/core/secure_seq.c
<<
1" /spaion /formon a 1" href="../linux+v3.7.3/net/core/secure_seq.c">1" img src="../.static/gfx/right.png" alt=">>">1" /spaion1" spai class="lxr_search">1" 1" input typluehidden" namluenavtarget" n value">1" input typluetext" namluesearch" iduesearch">1" butttiotypluesubmit">Search1" Prefsn /a>1" /spaion /divon form acopti="ajax+*" method="post" onsubmit="return false;">1" input typluehidden" namlueajax_lookup" idueajax_lookup" n value">1 /formon1 div class="headingbotttm">n div iduefile_contents"o
 
1 /a>#include <linux/kernel.h /a>>

 
2 /a>#include <linux/init.h /a>>

 
3 /a>#include <linux/cryptohash.h /a>>

 
4 /a>#include <linux/module.h /a>>

 
5 /a>#include <linux/cache.h /a>>

 
6 /a>#include <linux/random.h /a>>

 
7 /a>#include <linux/hrtimer.h /a>>

 
8 /a>#include <linux/ktime.h /a>>

 
9 /a>#include <linux/string.h /a>>

 6.10a>1
 11 /a>#include <net/secure_seq.h /a>>

 1210a>1
 13 /a>static
 a href="+code=u32" class="sref">u3210a>
 a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4]
 a href="+code=____cacheline_aligned" class="sref">____cacheline_aligned10a>;

 1410a>1
 15 /a>static
int
 a href="+code=__init" class="sref">__init10a>
 a href="+code=net_secret_init" class="sref">net_secret_init10a>(void)1
 16 /a>{1
 17 /a>         a href="+code=get_random_bytes" class="sref">get_random_bytes10a>( a href="+code=net_secret" class="sref">net_secret10a>, sizeof( a href="+code=net_secret" class="sref">net_secret10a>));

 18 /a>        return 0;

 19 /a>}

 2.10a> a href="+code=late_initcall" class="sref">late_initcall10a>( a href="+code=net_secret_init" class="sref">net_secret_init10a>);

 2110a>1
 22 /a>#ifdef  a href="+code=CONFIG_INET" class="sref">CONFIG_INET10a>1
 23 /a>static
 a href="+code=u32" class="sref">u3210a>
 a href="+code=seq_scale" class="sref">seq_scale10a>( a href="+code=u32" class="sref">u3210a>
 a href="+code=seq" class="sref">seq10a>)1
 24 /a>{1
 25 /a>         spai class="comment">/* /spaion
 26 /a> spai class="comment">         *      As close as possible to RFC 793, which
 27 /a> spai class="comment">         *      suggests using a 250 kHz clock.
 28 /a> spai class="comment">         *      Further reading shows this assumes 2 Mb/s networks.
 29 /a> spai class="comment">         *      For 6. Mb/s Ethernet, a 1 MHz clock is appropriate.
 30 /a> spai class="comment">         *      For 6. Gb/s Ethernet, a 1 GHz clock should be ok, but
 31 /a> spai class="comment">         *      we also need to limit the resoluoptioso that the u32 seq10spaion
 3210a> spai class="comment">         *      overlaps less thai one time per MSL (2 minutes).
 3310a> spai class="comment">         *      Choosing a clock of 64 ns period is OK. (period of 274 s)
 3410a> spai class="comment">         */
 35 /a>        return  a href="+code=seq" class="sref">seq10a> + ( a href="+code=ktime_to_ns" class="sref">ktime_to_ns10a>( a href="+code=ktime_get_real" class="sref">ktime_get_real10a>()) >> 6);

 36 /a>}

 37 /a>#endif

 3810a>1
 39 /a>#if  a href="+code=IS_ENABLED" class="sref">IS_ENABLED10a>( a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV610a>)1
 4.10a> a href="+code=__u32" class="sref">__u3210a>
 a href="+code=secure_tcpv6_sequence_number" class="sref">secure_tcpv6_sequence_number10a>(const
 a href="+code=__be32" class="sref">__be3210a>
* a href="+code=saddr" class="sref">saddr10a>, const
 a href="+code=__be32" class="sref">__be3210a>
* a href="+code=daddr" class="sref">daddr10a>,1
 41 /a>                                    a href="+code=__be16" class="sref">__be1610a>
 a href="+code=sport" class="sref">sport10a>,  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
 42 /a>{1
 43 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=secret" class="sref">secret10a>[ a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4];

 44 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

 45 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=i" class="sref">i10a>;

 4610a>1
 47 /a>         a href="+code=memcpy" class="sref">memcpy10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=saddr" class="sref">saddr10a>, 16);

 48 /a>        for ( a href="+code=i" class="sref">i10a> = 0;
 a href="+code=i" class="sref">i10a> < 4;
 a href="+code=i" class="sref">i10a>++)1
 49 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>] + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=daddr" class="sref">daddr10a>[ a href="+code=i" class="sref">i10a>];

 50 /a>         a href="+code=secret" class="sref">secret10a>[4] =  a href="+code=net_secret" class="sref">net_secret10a>[4] +

 51 /a>                ((( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=sport" class="sref">sport10a> << 16) + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=dport" class="sref">dport10a>);

 52 /a>        for ( a href="+code=i" class="sref">i10a> = 5;
 a href="+code=i" class="sref">i10a> <  a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4;
 a href="+code=i" class="sref">i10a>++)1
 53 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>];

 5410a>1
 55 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=secret" class="sref">secret10a>);

 5610a>1
 57 /a>        return  a href="+code=seq_scale" class="sref">seq_scale10a>( a href="+code=hash" class="sref">hash10a>[0]);

 58 /a>}

 5910a> a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10a>( a href="+code=secure_tcpv6_sequence_number" class="sref">secure_tcpv6_sequence_number10a>);

 6.10a>1
 6110a> a href="+code=u32" class="sref">u3210a>
 a href="+code=secure_ipv6_port_ephemeral" class="sref">secure_ipv6_port_ephemeral10a>(const
 a href="+code=__be32" class="sref">__be3210a>
* a href="+code=saddr" class="sref">saddr10a>, const
 a href="+code=__be32" class="sref">__be3210a>
* a href="+code=daddr" class="sref">daddr10a>,1
 62 /a>                                a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
 63 /a>{1
 64 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=secret" class="sref">secret10a>[ a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4];

 65 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

 66 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=i" class="sref">i10a>;

 6710a>1
 68 /a>         a href="+code=memcpy" class="sref">memcpy10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=saddr" class="sref">saddr10a>, 16);

 69 /a>        for ( a href="+code=i" class="sref">i10a> = 0;
 a href="+code=i" class="sref">i10a> < 4;
 a href="+code=i" class="sref">i10a>++)1
 70 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>] + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>)
 a href="+code=daddr" class="sref">daddr10a>[ a href="+code=i" class="sref">i10a>];

 71 /a>         a href="+code=secret" class="sref">secret10a>[4] =  a href="+code=net_secret" class="sref">net_secret10a>[4] + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=dport" class="sref">dport10a>;

 72 /a>        for ( a href="+code=i" class="sref">i10a> = 5;
 a href="+code=i" class="sref">i10a> <  a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4;
 a href="+code=i" class="sref">i10a>++)1
 73 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>];

 7410a>1
 75 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=secret" class="sref">secret10a>);

 7610a>1
 77 /a>        return  a href="+code=hash" class="sref">hash10a>[0];

 78 /a>}

 7910a> a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10a>( a href="+code=secure_ipv6_port_ephemeral" class="sref">secure_ipv6_port_ephemeral10a>);

 80 /a>#endif

 8110a>1
 82 /a>#ifdef  a href="+code=CONFIG_INET" class="sref">CONFIG_INET10a>1
 8310a> a href="+code=__u32" class="sref">__u3210a>
 a href="+code=secure_ip_id" class="sref">secure_ip_id10a>( a href="+code=__be32" class="sref">__be3210a>
 a href="+code=daddr" class="sref">daddr10a>)1
 84 /a>{1
 85 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

 8610a>1
 87 /a>         a href="+code=hash" class="sref">hash10a>[0] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=__u32" class="sref">__u3210a>)
 a href="+code=daddr" class="sref">daddr10a>;

 88 /a>         a href="+code=hash" class="sref">hash10a>[1] =  a href="+code=net_secret" class="sref">net_secret10a>[13];

 89 /a>         a href="+code=hash" class="sref">hash10a>[2] =  a href="+code=net_secret" class="sref">net_secret10a>[14];

 90 /a>         a href="+code=hash" class="sref">hash10a>[3] =  a href="+code=net_secret" class="sref">net_secret10a>[15];

 9110a>1
 92 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=net_secret" class="sref">net_secret10a>);

 9310a>1
 94 /a>        return  a href="+code=hash" class="sref">hash10a>[0];

 95 /a>}

 9610a>1
 9710a> a href="+code=__u32" class="sref">__u3210a>
 a href="+code=secure_ipv6_id" class="sref">secure_ipv6_id10a>(const
 a href="+code=__be32" class="sref">__be3210a>
 a href="+code=daddr" class="sref">daddr10a>[4])1
 98 /a>{1
 99 /a>         a href="+code=__u32" class="sref">__u3210a>
 a href="+code=hash" class="sref">hash10a>[4];

10010a>1
101 /a>         a href="+code=memcpy" class="sref">memcpy10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=daddr" class="sref">daddr10a>, 16);

102 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=net_secret" class="sref">net_secret10a>);

10310a>1
104 /a>        return  a href="+code=hash" class="sref">hash10a>[0];

105 /a>}

10610a>1
10710a> a href="+code=__u32" class="sref">__u3210a>
 a href="+code=secure_tcp_sequence_number" class="sref">secure_tcp_sequence_number10a>( a href="+code=__be32" class="sref">__be3210a>
 a href="+code=saddr" class="sref">saddr10a>,  a href="+code=__be32" class="sref">__be3210a>
 a href="+code=daddr" class="sref">daddr10a>,1
108 /a>                                  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=sport" class="sref">sport10a>,  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
109 /a>{1
110 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

11110a>1
112 /a>         a href="+code=hash" class="sref">hash10a>[0] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=saddr" class="sref">saddr10a>;

113 /a>         a href="+code=hash" class="sref">hash10a>[1] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=daddr" class="sref">daddr10a>;

114 /a>         a href="+code=hash" class="sref">hash10a>[2] = (( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=sport" class="sref">sport10a> << 16) + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=dport" class="sref">dport10a>;

115 /a>         a href="+code=hash" class="sref">hash10a>[3] =  a href="+code=net_secret" class="sref">net_secret10a>[15];

11610a>1
117 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=net_secret" class="sref">net_secret10a>);

11810a>1
119 /a>        return  a href="+code=seq_scale" class="sref">seq_scale10a>( a href="+code=hash" class="sref">hash10a>[0]);

12.10a>}

12110a>1
122 /a> a href="+code=u32" class="sref">u3210a>
 a href="+code=secure_ipv4_port_ephemeral" class="sref">secure_ipv4_port_ephemeral10a>( a href="+code=__be32" class="sref">__be3210a>
 a href="+code=saddr" class="sref">saddr10a>,  a href="+code=__be32" class="sref">__be3210a>
 a href="+code=daddr" class="sref">daddr10a>,  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
123 /a>{1
124 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

125 /a>

126 /a>         a href="+code=hash" class="sref">hash10a>[0] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=saddr" class="sref">saddr10a>;

127 /a>         a href="+code=hash" class="sref">hash10a>[1] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=daddr" class="sref">daddr10a>;

128 /a>         a href="+code=hash" class="sref">hash10a>[2] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=dport" class="sref">dport10a> ^  a href="+code=net_secret" class="sref">net_secret10a>[14];

129 /a>         a href="+code=hash" class="sref">hash10a>[3] =  a href="+code=net_secret" class="sref">net_secret10a>[15];

13010a>1
131 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=net_secret" class="sref">net_secret10a>);

13210a>1
133 /a>        return  a href="+code=hash" class="sref">hash10a>[0];

13410a>}

135 /a> a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL10a>( a href="+code=secure_ipv4_port_ephemeral" class="sref">secure_ipv4_port_ephemeral10a>);

136 /a>#endif

13710a>1
138 /a>#if  a href="+code=IS_ENABLED" class="sref">IS_ENABLED10a>( a href="+code=CONFIG_IP_DCCP" class="sref">CONFIG_IP_DCCP10a>)1
13910a> a href="+code=u64" class="sref">u64 /a>  a href="+code=secure_dccp_sequence_number" class="sref">secure_dccp_sequence_number10a>( a href="+code=__be32" class="sref">__be3210a>
 a href="+code=saddr" class="sref">saddr10a>,  a href="+code=__be32" class="sref">__be3210a>
 a href="+code=daddr" class="sref">daddr10a>,1
140 /a>                                 a href="+code=__be16" class="sref">__be1610a>
 a href="+code=sport" class="sref">sport10a>,  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
141 /a>{1
142 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

143 /a>         a href="+code=u64" class="sref">u64 /a>  a href="+code=seq" class="sref">seq10a>;

14410a>1
145 /a>         a href="+code=hash" class="sref">hash10a>[0] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=saddr" class="sref">saddr10a>;

146 /a>         a href="+code=hash" class="sref">hash10a>[1] = ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u32" class="sref">u3210a>) a href="+code=daddr" class="sref">daddr10a>;

147 /a>         a href="+code=hash" class="sref">hash10a>[2] = (( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=sport" class="sref">sport10a> << 16) + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=dport" class="sref">dport10a>;

148 /a>         a href="+code=hash" class="sref">hash10a>[3] =  a href="+code=net_secret" class="sref">net_secret10a>[15];

149 /a>

150 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=net_secret" class="sref">net_secret10a>);

15110a>1
152 /a>         a href="+code=seq" class="sref">seq10a> =  a href="+code=hash" class="sref">hash10a>[0] | ((( a href="+code=u64" class="sref">u64 /a>) a href="+code=hash" class="sref">hash10a>[1]) << 32);

153 /a>         a href="+code=seq" class="sref">seq10a> +=  a href="+code=ktime_to_ns" class="sref">ktime_to_ns10a>( a href="+code=ktime_get_real" class="sref">ktime_get_real10a>());

154 /a>         a href="+code=seq" class="sref">seq10a> &= (1ull << 48) - 1;

155 /a>

156 /a>        return  a href="+code=seq" class="sref">seq10a>;

157 /a>}

158 /a> a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10a>( a href="+code=secure_dccp_sequence_number" class="sref">secure_dccp_sequence_number10a>);

159 /a>

16.10a>#if  a href="+code=IS_ENABLED" class="sref">IS_ENABLED10a>( a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV610a>)1
16110a> a href="+code=u64" class="sref">u64 /a>  a href="+code=secure_dccpv6_sequence_number" class="sref">secure_dccpv6_sequence_number10a>( a href="+code=__be32" class="sref">__be3210a>
* a href="+code=saddr" class="sref">saddr10a>,  a href="+code=__be32" class="sref">__be3210a>
* a href="+code=daddr" class="sref">daddr10a>,1
162 /a>                                   a href="+code=__be16" class="sref">__be1610a>
 a href="+code=sport" class="sref">sport10a>,  a href="+code=__be16" class="sref">__be1610a>
 a href="+code=dport" class="sref">dport10a>)1
163 /a>{1
164 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=secret" class="sref">secret10a>[ a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4];

165 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=hash" class="sref">hash10a>[ a href="+code=MD5_DIGEST_WORDS" class="sref">MD5_DIGEST_WORDS10a>];

166 /a>         a href="+code=u64" class="sref">u64 /a>  a href="+code=seq" class="sref">seq10a>;

167 /a>         a href="+code=u32" class="sref">u3210a>
 a href="+code=i" class="sref">i10a>;

16810a>1
169 /a>         a href="+code=memcpy" class="sref">memcpy10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=saddr" class="sref">saddr10a>, 16);

170 /a>        for ( a href="+code=i" class="sref">i10a> = 0;
 a href="+code=i" class="sref">i10a> < 4;
 a href="+code=i" class="sref">i10a>++)1
171 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>] +  a href="+code=daddr" class="sref">daddr10a>[ a href="+code=i" class="sref">i10a>];

172 /a>         a href="+code=secret" class="sref">secret10a>[4] =  a href="+code=net_secret" class="sref">net_secret10a>[4] +

173 /a>                ((( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=sport" class="sref">sport10a> << 16) + ( a href="+code=__force" class="sref">__force10a>
 a href="+code=u16" class="sref">u1610a>) a href="+code=dport" class="sref">dport10a>);

174 /a>        for ( a href="+code=i" class="sref">i10a> = 5;
 a href="+code=i" class="sref">i10a> <  a href="+code=MD5_MESSAGE_BYTES" class="sref">MD5_MESSAGE_BYTES10a>
/ 4;
 a href="+code=i" class="sref">i10a>++)1
175 /a>                 a href="+code=secret" class="sref">secret10a>[ a href="+code=i" class="sref">i10a>] =  a href="+code=net_secret" class="sref">net_secret10a>[ a href="+code=i" class="sref">i10a>];

17610a>1
177 /a>         a href="+code=md5_transform" class="sref">md5_transform10a>( a href="+code=hash" class="sref">hash10a>,  a href="+code=secret" class="sref">secret10a>);

17810a>1
179 /a>         a href="+code=seq" class="sref">seq10a> =  a href="+code=hash" class="sref">hash10a>[0] | ((( a href="+code=u64" class="sref">u64 /a>) a href="+code=hash" class="sref">hash10a>[1]) << 32);

180 /a>         a href="+code=seq" class="sref">seq10a> +=  a href="+code=ktime_to_ns" class="sref">ktime_to_ns10a>( a href="+code=ktime_get_real" class="sref">ktime_get_real10a>());

181 /a>         a href="+code=seq" class="sref">seq10a> &= (1ull << 48) - 1;

18210a>1
183 /a>        return  a href="+code=seq" class="sref">seq10a>;

18410a>}

185 /a> a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10a>( a href="+code=secure_dccpv6_sequence_number" class="sref">secure_dccpv6_sequence_number10a>);

186 /a>#endif

187 /a>#endif

188 /a>
lxr.linux.no kindly hostedoby Redpill Linpro AS10a>, provider of Linux consulting and operaoptis services since 1995.