extern const struct proto_ops phonet_dgram_ops;
 
-struct sock *pn_find_sock_by_sa(const struct sockaddr_pn *sa);
+struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *sa);
 void phonet_get_local_port_range(int *min, int *max);
 void pn_sock_hash(struct sock *sk);
 void pn_sock_unhash(struct sock *sk);
 
 int phonet_address_add(struct net_device *dev, u8 addr);
 int phonet_address_del(struct net_device *dev, u8 addr);
 u8 phonet_address_get(struct net_device *dev, u8 addr);
-int phonet_address_lookup(u8 addr);
+int phonet_address_lookup(struct net *net, u8 addr);
 
 #define PN_NO_ADDR     0xff
 
 
        struct phonet_protocol *pnp;
        int err;
 
-       if (net != &init_net)
-               return -EAFNOSUPPORT;
-
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
        struct sockaddr_pn sa;
        u16 len;
 
-       if (dev_net(dev) != &init_net)
-               goto out;
-
        /* check we have at least a full Phonet header */
        if (!pskb_pull(skb, sizeof(struct phonethdr)))
                goto out;
        if (pn_sockaddr_get_addr(&sa) == 0)
                goto out; /* currently, we cannot be device 0 */
 
-       sk = pn_find_sock_by_sa(&sa);
+       sk = pn_find_sock_by_sa(dev_net(dev), &sa);
        if (sk == NULL) {
                if (can_respond(skb)) {
                        send_obj_unreachable(skb);
 
                dev = pnd->netdev;
                BUG_ON(!dev);
 
-               if (dev_net(dev) == net &&
+               if (net_eq(dev_net(dev), net) &&
                        (dev->reg_state == NETREG_REGISTERED) &&
                        ((pnd->netdev->flags & IFF_UP)) == IFF_UP)
                        break;
        return addr;
 }
 
-int phonet_address_lookup(u8 addr)
+int phonet_address_lookup(struct net *net, u8 addr)
 {
        struct phonet_device *pnd;
 
        spin_lock_bh(&pndevs.lock);
        list_for_each_entry(pnd, &pndevs.list, list) {
+               if (!net_eq(dev_net(pnd->netdev), net))
+                       continue;
                /* Don't allow unregistering devices! */
                if ((pnd->netdev->reg_state != NETREG_REGISTERED) ||
                                ((pnd->netdev->flags & IFF_UP)) != IFF_UP)
 
  * Find address based on socket address, match only certain fields.
  * Also grab sock if it was found. Remember to sock_put it later.
  */
-struct sock *pn_find_sock_by_sa(const struct sockaddr_pn *spn)
+struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *spn)
 {
        struct hlist_node *node;
        struct sock *sknode;
                struct pn_sock *pn = pn_sk(sknode);
                BUG_ON(!pn->sobject); /* unbound socket */
 
+               if (!net_eq(sock_net(sknode), net))
+                       continue;
                if (pn_port(obj)) {
                        /* Look up socket by port */
                        if (pn_port(pn->sobject) != pn_port(obj))
 
        handle = pn_sockaddr_get_object((struct sockaddr_pn *)addr);
        saddr = pn_addr(handle);
-       if (saddr && phonet_address_lookup(saddr))
+       if (saddr && phonet_address_lookup(sock_net(sk), saddr))
                return -EADDRNOTAVAIL;
 
        lock_sock(sk);
 int pn_sock_get_port(struct sock *sk, unsigned short sport)
 {
        static int port_cur;
+       struct net *net = sock_net(sk);
        struct pn_sock *pn = pn_sk(sk);
        struct sockaddr_pn try_sa;
        struct sock *tmpsk;
                                port_cur = pmin;
 
                        pn_sockaddr_set_port(&try_sa, port_cur);
-                       tmpsk = pn_find_sock_by_sa(&try_sa);
+                       tmpsk = pn_find_sock_by_sa(net, &try_sa);
                        if (tmpsk == NULL) {
                                sport = port_cur;
                                goto found;
        } else {
                /* try to find specific port */
                pn_sockaddr_set_port(&try_sa, sport);
-               tmpsk = pn_find_sock_by_sa(&try_sa);
+               tmpsk = pn_find_sock_by_sa(net, &try_sa);
                if (tmpsk == NULL)
                        /* No sock there! We can use that port... */
                        goto found;