SCCS-vsn: sys/netiso/iso_pcb.c 7.12
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)iso_pcb.c 7.11 (Berkeley) %G%
+ * @(#)iso_pcb.c 7.12 (Berkeley) %G%
*/
/***********************************************************
*/
/***********************************************************
if( (nam->m_len < 2) || (nam->m_len < siso->siso_len)) {
return ENAMETOOLONG;
}
if( (nam->m_len < 2) || (nam->m_len < siso->siso_len)) {
return ENAMETOOLONG;
}
- if (siso->siso_tlen) {
- register char *cp = TSEL(siso);
- suf.data[0] = cp[0];
- suf.data[1] = cp[1];
- }
if (siso->siso_nlen) {
/* non-zero net addr- better match one of our interfaces */
IFDEBUG(D_ISO)
if (siso->siso_nlen) {
/* non-zero net addr- better match one of our interfaces */
IFDEBUG(D_ISO)
isop->isop_laddr = mtod(nam, struct sockaddr_iso *);
}
bcopy((caddr_t)siso, (caddr_t)isop->isop_laddr, siso->siso_len);
isop->isop_laddr = mtod(nam, struct sockaddr_iso *);
}
bcopy((caddr_t)siso, (caddr_t)isop->isop_laddr, siso->siso_len);
- if (suf.s || siso->siso_tlen != 2) {
- if((suf.s < ISO_PORT_RESERVED) && (siso->siso_tlen <= 2) &&
+ if (siso->siso_tlen == 0)
+ goto noname;
+ if ((isop->isop_socket->so_options & SO_REUSEADDR) == 0 &&
+ iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr))
+ return EADDRINUSE;
+ if (siso->siso_tlen <= 2) {
+ bcopy(TSEL(siso), suf.data, sizeof(suf.data));
+ suf.s = ntohs(suf.s);
+ if((suf.s < ISO_PORT_RESERVED) &&
(isop->isop_socket->so_state && SS_PRIV) == 0)
return EACCES;
(isop->isop_socket->so_state && SS_PRIV) == 0)
return EACCES;
- if ((isop->isop_socket->so_options & SO_REUSEADDR) == 0 &&
- iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr))
- return EADDRINUSE;
} else {
register char *cp;
noname:
} else {
register char *cp;
noname:
if (head->isop_lport++ < ISO_PORT_RESERVED ||
head->isop_lport > ISO_PORT_USERRESERVED)
head->isop_lport = ISO_PORT_RESERVED;
if (head->isop_lport++ < ISO_PORT_RESERVED ||
head->isop_lport > ISO_PORT_USERRESERVED)
head->isop_lport = ISO_PORT_RESERVED;
- suf.s = head->isop_lport;
+ suf.s = htons(head->isop_lport);
cp[0] = suf.data[0];
cp[1] = suf.data[1];
} while (iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr));
cp[0] = suf.data[0];
cp[1] = suf.data[1];
} while (iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr));