2 * $Id: netddp_open.c,v 1.9 2005-04-28 20:50:02 bfernhomberg Exp $
4 * Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu)
5 * Copyright (c) 1990,1991 Regents of The University of Michigan.
6 * All Rights Reserved. See COPYRIGHT.
8 * open a ddp socket and return the port and address assigned. return
9 * various address info if requested as well.
14 #endif /* HAVE_CONFIG_H */
18 #include <sys/types.h>
19 #include <sys/socket.h>
22 #include <netat/appletalk.h>
23 #include <netat/ddp.h>
24 #endif /* MACOSX_SERVER */
26 #include <netatalk/at.h>
27 #include <atalk/netddp.h>
29 int netddp_open(struct sockaddr_at *addr, struct sockaddr_at *bridge)
39 at_inet_t address, baddress;
41 if ((s = ddp_open(addr ? &addr->sat_port : NULL)) < 0)
47 if (rtmp_netinfo(s, &address, &baddress) < 0) {
52 memcpy(&addr->sat_addr.s_net, &address.net, sizeof(addr->sat_addr.s_net));
53 addr->sat_addr.s_node = address.node;
54 addr->sat_port = address.socket;
56 memcpy(&bridge->sat_addr.s_net, &baddress.net,
57 sizeof(bridge->sat_addr.s_net));
58 bridge->sat_addr.s_node = baddress.node;
59 bridge->sat_port = baddress.socket;
61 #else /* MACOSX_SERVER */
64 if ((s = socket( AF_APPLETALK, SOCK_DGRAM, 0 )) < 0)
70 addr->sat_family = AF_APPLETALK;
71 /* rest of address should be initialized by the caller */
72 if (bind(s, (struct sockaddr *) addr, sizeof( struct sockaddr_at )) < 0 ) {
77 /* get the real address from the kernel */
78 len = sizeof( struct sockaddr_at);
79 if ( getsockname( s, (struct sockaddr *) addr, &len ) != 0 ) {
83 #endif /* MACOSX_SERVER */