You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-patrick' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-test-2.6
This commit is contained in:
+41
-12
@@ -25,7 +25,7 @@
|
||||
#include <linux/ip.h>
|
||||
#include <linux/ipv6.h> /* for struct ipv6hdr */
|
||||
#include <net/ipv6.h> /* for ipv6_addr_copy */
|
||||
#ifdef CONFIG_IP_VS_NFCT
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
#endif
|
||||
|
||||
@@ -136,24 +136,24 @@ static inline const char *ip_vs_dbg_addr(int af, char *buf, size_t buf_len,
|
||||
if (net_ratelimit()) \
|
||||
printk(KERN_DEBUG pr_fmt(msg), ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define IP_VS_DBG_PKT(level, pp, skb, ofs, msg) \
|
||||
#define IP_VS_DBG_PKT(level, af, pp, skb, ofs, msg) \
|
||||
do { \
|
||||
if (level <= ip_vs_get_debug_level()) \
|
||||
pp->debug_packet(pp, skb, ofs, msg); \
|
||||
pp->debug_packet(af, pp, skb, ofs, msg); \
|
||||
} while (0)
|
||||
#define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg) \
|
||||
#define IP_VS_DBG_RL_PKT(level, af, pp, skb, ofs, msg) \
|
||||
do { \
|
||||
if (level <= ip_vs_get_debug_level() && \
|
||||
net_ratelimit()) \
|
||||
pp->debug_packet(pp, skb, ofs, msg); \
|
||||
pp->debug_packet(af, pp, skb, ofs, msg); \
|
||||
} while (0)
|
||||
#else /* NO DEBUGGING at ALL */
|
||||
#define IP_VS_DBG_BUF(level, msg...) do {} while (0)
|
||||
#define IP_VS_ERR_BUF(msg...) do {} while (0)
|
||||
#define IP_VS_DBG(level, msg...) do {} while (0)
|
||||
#define IP_VS_DBG_RL(msg...) do {} while (0)
|
||||
#define IP_VS_DBG_PKT(level, pp, skb, ofs, msg) do {} while (0)
|
||||
#define IP_VS_DBG_RL_PKT(level, pp, skb, ofs, msg) do {} while (0)
|
||||
#define IP_VS_DBG_PKT(level, af, pp, skb, ofs, msg) do {} while (0)
|
||||
#define IP_VS_DBG_RL_PKT(level, af, pp, skb, ofs, msg) do {} while (0)
|
||||
#endif
|
||||
|
||||
#define IP_VS_BUG() BUG()
|
||||
@@ -345,7 +345,7 @@ struct ip_vs_protocol {
|
||||
|
||||
int (*app_conn_bind)(struct ip_vs_conn *cp);
|
||||
|
||||
void (*debug_packet)(struct ip_vs_protocol *pp,
|
||||
void (*debug_packet)(int af, struct ip_vs_protocol *pp,
|
||||
const struct sk_buff *skb,
|
||||
int offset,
|
||||
const char *msg);
|
||||
@@ -409,6 +409,7 @@ struct ip_vs_conn {
|
||||
/* packet transmitter for different forwarding methods. If it
|
||||
mangles the packet, it must return NF_DROP or better NF_STOLEN,
|
||||
otherwise this must be changed to a sk_buff **.
|
||||
NF_ACCEPT can be returned when destination is local.
|
||||
*/
|
||||
int (*packet_xmit)(struct sk_buff *skb, struct ip_vs_conn *cp,
|
||||
struct ip_vs_protocol *pp);
|
||||
@@ -597,11 +598,19 @@ struct ip_vs_app {
|
||||
__be16 port; /* port number in net order */
|
||||
atomic_t usecnt; /* usage counter */
|
||||
|
||||
/* output hook: return false if can't linearize. diff set for TCP. */
|
||||
/*
|
||||
* output hook: Process packet in inout direction, diff set for TCP.
|
||||
* Return: 0=Error, 1=Payload Not Mangled/Mangled but checksum is ok,
|
||||
* 2=Mangled but checksum was not updated
|
||||
*/
|
||||
int (*pkt_out)(struct ip_vs_app *, struct ip_vs_conn *,
|
||||
struct sk_buff *, int *diff);
|
||||
|
||||
/* input hook: return false if can't linearize. diff set for TCP. */
|
||||
/*
|
||||
* input hook: Process packet in outin direction, diff set for TCP.
|
||||
* Return: 0=Error, 1=Payload Not Mangled/Mangled but checksum is ok,
|
||||
* 2=Mangled but checksum was not updated
|
||||
*/
|
||||
int (*pkt_in)(struct ip_vs_app *, struct ip_vs_conn *,
|
||||
struct sk_buff *, int *diff);
|
||||
|
||||
@@ -819,7 +828,8 @@ extern int
|
||||
ip_vs_set_state_timeout(int *table, int num, const char *const *names,
|
||||
const char *name, int to);
|
||||
extern void
|
||||
ip_vs_tcpudp_debug_packet(struct ip_vs_protocol *pp, const struct sk_buff *skb,
|
||||
ip_vs_tcpudp_debug_packet(int af, struct ip_vs_protocol *pp,
|
||||
const struct sk_buff *skb,
|
||||
int offset, const char *msg);
|
||||
|
||||
extern struct ip_vs_protocol ip_vs_protocol_tcp;
|
||||
@@ -841,7 +851,8 @@ extern int ip_vs_unbind_scheduler(struct ip_vs_service *svc);
|
||||
extern struct ip_vs_scheduler *ip_vs_scheduler_get(const char *sched_name);
|
||||
extern void ip_vs_scheduler_put(struct ip_vs_scheduler *scheduler);
|
||||
extern struct ip_vs_conn *
|
||||
ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb);
|
||||
ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb,
|
||||
struct ip_vs_protocol *pp, int *ignored);
|
||||
extern int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
|
||||
struct ip_vs_protocol *pp);
|
||||
|
||||
@@ -1013,6 +1024,24 @@ static inline __wsum ip_vs_check_diff2(__be16 old, __be16 new, __wsum oldsum)
|
||||
return csum_partial(diff, sizeof(diff), oldsum);
|
||||
}
|
||||
|
||||
/*
|
||||
* Forget current conntrack (unconfirmed) and attach notrack entry
|
||||
*/
|
||||
static inline void ip_vs_notrack(struct sk_buff *skb)
|
||||
{
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
enum ip_conntrack_info ctinfo;
|
||||
struct nf_conn *ct = ct = nf_ct_get(skb, &ctinfo);
|
||||
|
||||
if (!ct || !nf_ct_is_untracked(ct)) {
|
||||
nf_reset(skb);
|
||||
skb->nfct = &nf_ct_untracked_get()->ct_general;
|
||||
skb->nfctinfo = IP_CT_NEW;
|
||||
nf_conntrack_get(skb->nfct);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IP_VS_NFCT
|
||||
/*
|
||||
* Netfilter connection tracking
|
||||
|
||||
Reference in New Issue
Block a user