2 * $Id: ddp.c,v 1.2 2001-06-29 14:14:47 rufustfirefly Exp $
7 #endif /* HAVE_CONFIG_H */
10 #include <sys/stream.h>
11 #include <sys/cmn_err.h>
12 #include <sys/socket.h>
13 #include <sys/errno.h>
14 #include <sys/tihdr.h>
16 #include <sys/ethernet.h>
21 #include <netatalk/endian.h>
22 #include <netatalk/ddp.h>
23 #include <netatalk/at.h>
29 ddp_rput( struct atif_data *aid, mblk_t *m )
31 struct atif_data *daid;
33 struct sockaddr_at sat;
36 if ( m->b_wptr - m->b_rptr < sizeof( struct ddpehdr )) {
37 cmn_err( CE_NOTE, "ddp_rput short packet\n" );
42 deh = (struct ddpehdr *)m->b_rptr;
44 sat.sat_addr.s_net = deh->deh_dnet;
45 sat.sat_addr.s_node = deh->deh_dnode;
46 sat.sat_port = deh->deh_dport;
48 if (( daid = if_dest( aid, &sat )) != NULL ) {
49 if (( sd = sock_dest( daid, &sat )) != NULL ) {
50 if ( sd->sd_state != TS_IDLE ) {
54 bzero( (caddr_t)&sat, sizeof( struct sockaddr_at ));
55 sat.sat_family = AF_APPLETALK;
56 sat.sat_addr.s_net = deh->deh_snet;
57 sat.sat_addr.s_node = deh->deh_snode;
58 sat.sat_port = deh->deh_sport;
59 adjmsg( m, sizeof( struct ddpehdr ));
60 t_unitdata_ind( WR( sd->sd_q ), m, &sat );
69 return( ENETUNREACH );