1651350d1SDavid Howells /* RxRPC kernel service interface definitions 217926a79SDavid Howells * 3651350d1SDavid Howells * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 417926a79SDavid Howells * Written by David Howells (dhowells@redhat.com) 517926a79SDavid Howells * 617926a79SDavid Howells * This program is free software; you can redistribute it and/or 717926a79SDavid Howells * modify it under the terms of the GNU General Public License 817926a79SDavid Howells * as published by the Free Software Foundation; either version 917926a79SDavid Howells * 2 of the License, or (at your option) any later version. 1017926a79SDavid Howells */ 1117926a79SDavid Howells 1217926a79SDavid Howells #ifndef _NET_RXRPC_H 1317926a79SDavid Howells #define _NET_RXRPC_H 1417926a79SDavid Howells 158e688d9cSDavid Howells #include <linux/skbuff.h> 1617926a79SDavid Howells #include <linux/rxrpc.h> 1717926a79SDavid Howells 18*4de48af6SDavid Howells struct key; 19*4de48af6SDavid Howells struct sock; 20*4de48af6SDavid Howells struct socket; 21651350d1SDavid Howells struct rxrpc_call; 22651350d1SDavid Howells 23651350d1SDavid Howells /* 24651350d1SDavid Howells * the mark applied to socket buffers that may be intercepted 25651350d1SDavid Howells */ 26dc44b3a0SDavid Howells enum rxrpc_skb_mark { 27651350d1SDavid Howells RXRPC_SKB_MARK_DATA, /* data message */ 28651350d1SDavid Howells RXRPC_SKB_MARK_FINAL_ACK, /* final ACK received message */ 29651350d1SDavid Howells RXRPC_SKB_MARK_BUSY, /* server busy message */ 30651350d1SDavid Howells RXRPC_SKB_MARK_REMOTE_ABORT, /* remote abort message */ 31dc44b3a0SDavid Howells RXRPC_SKB_MARK_LOCAL_ABORT, /* local abort message */ 32651350d1SDavid Howells RXRPC_SKB_MARK_NET_ERROR, /* network error message */ 33651350d1SDavid Howells RXRPC_SKB_MARK_LOCAL_ERROR, /* local error message */ 34651350d1SDavid Howells RXRPC_SKB_MARK_NEW_CALL, /* local error message */ 35651350d1SDavid Howells }; 36651350d1SDavid Howells 37651350d1SDavid Howells typedef void (*rxrpc_interceptor_t)(struct sock *, unsigned long, 38651350d1SDavid Howells struct sk_buff *); 39cd2cf63aSJoe Perches void rxrpc_kernel_intercept_rx_messages(struct socket *, rxrpc_interceptor_t); 40cd2cf63aSJoe Perches struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *, 41651350d1SDavid Howells struct sockaddr_rxrpc *, 42651350d1SDavid Howells struct key *, 43651350d1SDavid Howells unsigned long, 44651350d1SDavid Howells gfp_t); 45*4de48af6SDavid Howells int rxrpc_kernel_send_data(struct socket *, struct rxrpc_call *, 46*4de48af6SDavid Howells struct msghdr *, size_t); 47372ee163SDavid Howells void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *); 48*4de48af6SDavid Howells void rxrpc_kernel_abort_call(struct socket *, struct rxrpc_call *, u32); 49*4de48af6SDavid Howells void rxrpc_kernel_end_call(struct socket *, struct rxrpc_call *); 50cd2cf63aSJoe Perches bool rxrpc_kernel_is_data_last(struct sk_buff *); 51cd2cf63aSJoe Perches u32 rxrpc_kernel_get_abort_code(struct sk_buff *); 52cd2cf63aSJoe Perches int rxrpc_kernel_get_error_number(struct sk_buff *); 53cd2cf63aSJoe Perches void rxrpc_kernel_free_skb(struct sk_buff *); 54cd2cf63aSJoe Perches struct rxrpc_call *rxrpc_kernel_accept_call(struct socket *, unsigned long); 55cd2cf63aSJoe Perches int rxrpc_kernel_reject_call(struct socket *); 568324f0bcSDavid Howells void rxrpc_kernel_get_peer(struct socket *, struct rxrpc_call *, 578324f0bcSDavid Howells struct sockaddr_rxrpc *); 58651350d1SDavid Howells 5917926a79SDavid Howells #endif /* _NET_RXRPC_H */ 60