aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/ip_vs.h1
-rw-r--r--net/netfilter/ipvs/ip_vs_conn.c25
2 files changed, 21 insertions, 5 deletions
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index b6b309d05e4..974daf52ba7 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -572,6 +572,7 @@ struct ip_vs_pe {
572 struct ip_vs_conn *ct); 572 struct ip_vs_conn *ct);
573 u32 (*hashkey_raw)(const struct ip_vs_conn_param *p, u32 initval, 573 u32 (*hashkey_raw)(const struct ip_vs_conn_param *p, u32 initval,
574 bool inverse); 574 bool inverse);
575 int (*show_pe_data)(const struct ip_vs_conn *cp, char *buf);
575}; 576};
576 577
577/* 578/*
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
index 06da21e9740..4adedefdf56 100644
--- a/net/netfilter/ipvs/ip_vs_conn.c
+++ b/net/netfilter/ipvs/ip_vs_conn.c
@@ -950,30 +950,45 @@ static int ip_vs_conn_seq_show(struct seq_file *seq, void *v)
950 950
951 if (v == SEQ_START_TOKEN) 951 if (v == SEQ_START_TOKEN)
952 seq_puts(seq, 952 seq_puts(seq,
953 "Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires\n"); 953 "Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData\n");
954 else { 954 else {
955 const struct ip_vs_conn *cp = v; 955 const struct ip_vs_conn *cp = v;
956 char pe_data[IP_VS_PENAME_MAXLEN + IP_VS_PEDATA_MAXLEN + 3];
957 size_t len = 0;
958
959 if (cp->dest && cp->dest->svc->pe &&
960 cp->dest->svc->pe->show_pe_data) {
961 pe_data[0] = ' ';
962 len = strlen(cp->dest->svc->pe->name);
963 memcpy(pe_data + 1, cp->dest->svc->pe->name, len);
964 pe_data[len + 1] = ' ';
965 len += 2;
966 len += cp->dest->svc->pe->show_pe_data(cp,
967 pe_data + len);
968 }
969 pe_data[len] = '\0';
956 970
957#ifdef CONFIG_IP_VS_IPV6 971#ifdef CONFIG_IP_VS_IPV6
958 if (cp->af == AF_INET6) 972 if (cp->af == AF_INET6)
959 seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X %pI6 %04X %-11s %7lu\n", 973 seq_printf(seq, "%-3s %pI6 %04X %pI6 %04X "
974 "%pI6 %04X %-11s %7lu%s\n",
960 ip_vs_proto_name(cp->protocol), 975 ip_vs_proto_name(cp->protocol),
961 &cp->caddr.in6, ntohs(cp->cport), 976 &cp->caddr.in6, ntohs(cp->cport),
962 &cp->vaddr.in6, ntohs(cp->vport), 977 &cp->vaddr.in6, ntohs(cp->vport),
963 &cp->daddr.in6, ntohs(cp->dport), 978 &cp->daddr.in6, ntohs(cp->dport),
964 ip_vs_state_name(cp->protocol, cp->state), 979 ip_vs_state_name(cp->protocol, cp->state),
965 (cp->timer.expires-jiffies)/HZ); 980 (cp->timer.expires-jiffies)/HZ, pe_data);
966 else 981 else
967#endif 982#endif
968 seq_printf(seq, 983 seq_printf(seq,
969 "%-3s %08X %04X %08X %04X" 984 "%-3s %08X %04X %08X %04X"
970 " %08X %04X %-11s %7lu\n", 985 " %08X %04X %-11s %7lu%s\n",
971 ip_vs_proto_name(cp->protocol), 986 ip_vs_proto_name(cp->protocol),
972 ntohl(cp->caddr.ip), ntohs(cp->cport), 987 ntohl(cp->caddr.ip), ntohs(cp->cport),
973 ntohl(cp->vaddr.ip), ntohs(cp->vport), 988 ntohl(cp->vaddr.ip), ntohs(cp->vport),
974 ntohl(cp->daddr.ip), ntohs(cp->dport), 989 ntohl(cp->daddr.ip), ntohs(cp->dport),
975 ip_vs_state_name(cp->protocol, cp->state), 990 ip_vs_state_name(cp->protocol, cp->state),
976 (cp->timer.expires-jiffies)/HZ); 991 (cp->timer.expires-jiffies)/HZ, pe_data);
977 } 992 }
978 return 0; 993 return 0;
979} 994}