@ -689,84 +689,6 @@ int xfrm_count_enc_supported(void)
}
EXPORT_SYMBOL_GPL ( xfrm_count_enc_supported ) ;
/* Move to common area: it is shared with AH. */
int skb_icv_walk ( const struct sk_buff * skb , struct hash_desc * desc ,
int offset , int len , icv_update_fn_t icv_update )
{
int start = skb_headlen ( skb ) ;
int i , copy = start - offset ;
struct sk_buff * frag_iter ;
struct scatterlist sg ;
int err ;
/* Checksum header. */
if ( copy > 0 ) {
if ( copy > len )
copy = len ;
sg_init_one ( & sg , skb - > data + offset , copy ) ;
err = icv_update ( desc , & sg , copy ) ;
if ( unlikely ( err ) )
return err ;
if ( ( len - = copy ) = = 0 )
return 0 ;
offset + = copy ;
}
for ( i = 0 ; i < skb_shinfo ( skb ) - > nr_frags ; i + + ) {
int end ;
WARN_ON ( start > offset + len ) ;
end = start + skb_shinfo ( skb ) - > frags [ i ] . size ;
if ( ( copy = end - offset ) > 0 ) {
skb_frag_t * frag = & skb_shinfo ( skb ) - > frags [ i ] ;
if ( copy > len )
copy = len ;
sg_init_table ( & sg , 1 ) ;
sg_set_page ( & sg , frag - > page , copy ,
frag - > page_offset + offset - start ) ;
err = icv_update ( desc , & sg , copy ) ;
if ( unlikely ( err ) )
return err ;
if ( ! ( len - = copy ) )
return 0 ;
offset + = copy ;
}
start = end ;
}
skb_walk_frags ( skb , frag_iter ) {
int end ;
WARN_ON ( start > offset + len ) ;
end = start + frag_iter - > len ;
if ( ( copy = end - offset ) > 0 ) {
if ( copy > len )
copy = len ;
err = skb_icv_walk ( frag_iter , desc , offset - start ,
copy , icv_update ) ;
if ( unlikely ( err ) )
return err ;
if ( ( len - = copy ) = = 0 )
return 0 ;
offset + = copy ;
}
start = end ;
}
BUG_ON ( len ) ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( skb_icv_walk ) ;
# if defined(CONFIG_INET_ESP) || defined(CONFIG_INET_ESP_MODULE) || defined(CONFIG_INET6_ESP) || defined(CONFIG_INET6_ESP_MODULE)
void * pskb_put ( struct sk_buff * skb , struct sk_buff * tail , int len )