net: Fix UDP bind commands
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Feb 2017 18:33:48 +0000 (13:33 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Feb 2017 18:34:59 +0000 (13:34 -0500)
Previously, UDP would just use the standard bind, which assigns a local
port.  However, it wouldn't add an entry to the hash table, so any inbound
connections would be rejected.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/net/udp.c

index 8f81068..6e6b643 100644 (file)
@@ -156,6 +156,15 @@ static void udpconnect(struct conv *c, char **argv, int argc)
        iphtadd(&upriv->ht, c);
 }
 
+static void udpbind(struct conv *c, char **argv, int argc)
+{
+       Udppriv *upriv;
+
+       upriv = c->p->priv;
+       Fsstdbind(c, argv, argc);
+       iphtadd(&upriv->ht, c);
+}
+
 static int udpstate(struct conv *c, char *state, int n)
 {
        return snprintf(state, n, "%s qin %d qout %d\n",
@@ -669,6 +678,7 @@ void udpinit(struct Fs *fs)
        udp->priv = kzmalloc(sizeof(Udppriv), 0);
        udp->name = "udp";
        udp->connect = udpconnect;
+       udp->bind = udpbind;
        udp->announce = udpannounce;
        udp->bypass = udpbypass;
        udp->ctl = udpctl;