struct ip_vs_iphdr iph;
        struct ip_vs_dest *dest;
        struct ip_vs_conn *ct;
-       __be16  dport;   /* destination port to forward */
+       __be16  dport;                  /* destination port to forward */
        union nf_inet_addr snet;        /* source network of the client,
                                           after masking */
-       ip_vs_fill_iphdr(AF_INET, skb_network_header(skb), &iph);
+
+       ip_vs_fill_iphdr(svc->af, skb_network_header(skb), &iph);
 
        /* Mask saddr with the netmask to adjust template granularity */
-       snet.ip = iph.saddr.ip & svc->netmask;
+#ifdef CONFIG_IP_VS_IPV6
+       if (svc->af == AF_INET6)
+               ipv6_addr_prefix(&snet.in6, &iph.saddr.in6, svc->netmask);
+       else
+#endif
+               snet.ip = iph.saddr.ip & svc->netmask;
 
-       IP_VS_DBG(6, "p-schedule: src %u.%u.%u.%u:%u dest %u.%u.%u.%u:%u "
-                 "mnet %u.%u.%u.%u\n",
-                 NIPQUAD(iph.saddr.ip), ntohs(ports[0]),
-                 NIPQUAD(iph.daddr.ip), ntohs(ports[1]),
-                 NIPQUAD(snet));
+       IP_VS_DBG_BUF(6, "p-schedule: src %s:%u dest %s:%u "
+                     "mnet %s\n",
+                     IP_VS_DBG_ADDR(svc->af, &iph.saddr), ntohs(ports[0]),
+                     IP_VS_DBG_ADDR(svc->af, &iph.daddr), ntohs(ports[1]),
+                     IP_VS_DBG_ADDR(svc->af, &snet));
 
        /*
         * As far as we know, FTP is a very complicated network protocol, and
        if (ports[1] == svc->port) {
                /* Check if a template already exists */
                if (svc->port != FTPPORT)
-                       ct = ip_vs_ct_in_get(AF_INET, iph.protocol, &snet, 0,
+                       ct = ip_vs_ct_in_get(svc->af, iph.protocol, &snet, 0,
                                             &iph.daddr, ports[1]);
                else
-                       ct = ip_vs_ct_in_get(AF_INET, iph.protocol, &snet, 0,
+                       ct = ip_vs_ct_in_get(svc->af, iph.protocol, &snet, 0,
                                             &iph.daddr, 0);
 
                if (!ct || !ip_vs_check_template(ct)) {
                         * for ftp service.
                         */
                        if (svc->port != FTPPORT)
-                               ct = ip_vs_conn_new(AF_INET, iph.protocol,
+                               ct = ip_vs_conn_new(svc->af, iph.protocol,
                                                    &snet, 0,
                                                    &iph.daddr,
                                                    ports[1],
                                                    IP_VS_CONN_F_TEMPLATE,
                                                    dest);
                        else
-                               ct = ip_vs_conn_new(AF_INET, iph.protocol,
+                               ct = ip_vs_conn_new(svc->af, iph.protocol,
                                                    &snet, 0,
                                                    &iph.daddr, 0,
                                                    &dest->addr, 0,
                                .all = { 0, 0, 0, htonl(svc->fwmark) }
                        };
 
-                       ct = ip_vs_ct_in_get(AF_INET, IPPROTO_IP, &snet, 0,
+                       ct = ip_vs_ct_in_get(svc->af, IPPROTO_IP, &snet, 0,
                                             &fwmark, 0);
                } else
-                       ct = ip_vs_ct_in_get(AF_INET, iph.protocol, &snet, 0,
+                       ct = ip_vs_ct_in_get(svc->af, iph.protocol, &snet, 0,
                                             &iph.daddr, 0);
 
                if (!ct || !ip_vs_check_template(ct)) {
                                        .all = { 0, 0, 0, htonl(svc->fwmark) }
                                };
 
-                               ct = ip_vs_conn_new(AF_INET, IPPROTO_IP,
+                               ct = ip_vs_conn_new(svc->af, IPPROTO_IP,
                                                    &snet, 0,
                                                    &fwmark, 0,
                                                    &dest->addr, 0,
                                                    IP_VS_CONN_F_TEMPLATE,
                                                    dest);
                        } else
-                               ct = ip_vs_conn_new(AF_INET, iph.protocol,
+                               ct = ip_vs_conn_new(svc->af, iph.protocol,
                                                    &snet, 0,
                                                    &iph.daddr, 0,
                                                    &dest->addr, 0,
        /*
         *    Create a new connection according to the template
         */
-       cp = ip_vs_conn_new(AF_INET, iph.protocol,
+       cp = ip_vs_conn_new(svc->af, iph.protocol,
                            &iph.saddr, ports[0],
                            &iph.daddr, ports[1],
                            &dest->addr, dport,
        /*
         *    Create a connection entry.
         */
-       cp = ip_vs_conn_new(AF_INET, iph.protocol,
+       cp = ip_vs_conn_new(svc->af, iph.protocol,
                            &iph.saddr, pptr[0],
                            &iph.daddr, pptr[1],
                            &dest->addr, dest->port ? dest->port : pptr[1],
        if (cp == NULL)
                return NULL;
 
-       IP_VS_DBG(6, "Schedule fwd:%c c:%u.%u.%u.%u:%u v:%u.%u.%u.%u:%u "
-                 "d:%u.%u.%u.%u:%u conn->flags:%X conn->refcnt:%d\n",
-                 ip_vs_fwd_tag(cp),
-                 NIPQUAD(cp->caddr.ip), ntohs(cp->cport),
-                 NIPQUAD(cp->vaddr.ip), ntohs(cp->vport),
-                 NIPQUAD(cp->daddr.ip), ntohs(cp->dport),
-                 cp->flags, atomic_read(&cp->refcnt));
+       IP_VS_DBG_BUF(6, "Schedule fwd:%c c:%s:%u v:%s:%u "
+                     "d:%s:%u conn->flags:%X conn->refcnt:%d\n",
+                     ip_vs_fwd_tag(cp),
+                     IP_VS_DBG_ADDR(svc->af, &cp->caddr), ntohs(cp->cport),
+                     IP_VS_DBG_ADDR(svc->af, &cp->vaddr), ntohs(cp->vport),
+                     IP_VS_DBG_ADDR(svc->af, &cp->daddr), ntohs(cp->dport),
+                     cp->flags, atomic_read(&cp->refcnt));
 
        ip_vs_conn_stats(cp, svc);
        return cp;