Lines Matching refs:ddp

75 at_sockaddr(struct ddpcb *ddp, struct sockaddr **addr)
79 * Prevent modification of ddp during copy of addr.
81 DDP_LOCK_ASSERT(ddp);
82 *addr = sodupsockaddr((struct sockaddr *)&ddp->ddp_lsat, M_NOWAIT);
86 at_pcbsetaddr(struct ddpcb *ddp, struct sockaddr *addr, struct thread *td)
93 * We read and write both the ddp passed in, and also ddp_ports.
96 DDP_LOCK_ASSERT(ddp);
101 if (ddp->ddp_lsat.sat_port != ATADDR_ANYPORT)
155 ddp->ddp_lsat = *sat;
168 ddp->ddp_lsat.sat_port = sat->sat_port;
169 ddp_ports[sat->sat_port - 1] = ddp;
181 ddp->ddp_pnext = ddp_ports[sat->sat_port - 1];
182 ddp_ports[sat->sat_port - 1] = ddp;
183 if (ddp->ddp_pnext != NULL)
184 ddp->ddp_pnext->ddp_pprev = ddp;
191 at_pcbconnect(struct ddpcb *ddp, struct sockaddr *addr, struct thread *td)
200 DDP_LOCK_ASSERT(ddp);
212 if (ddp->ddp_lsat.sat_port == ATADDR_ANYPORT)
214 hintnet = ddp->ddp_lsat.sat_addr.s_net;
217 ro = &ddp->ddp_route;
278 ddp->ddp_fsat = *sat;
279 if (ddp->ddp_lsat.sat_port == ATADDR_ANYPORT)
280 return (at_pcbsetaddr(ddp, NULL, td));
285 at_pcbdisconnect(struct ddpcb *ddp)
288 DDP_LOCK_ASSERT(ddp);
290 ddp->ddp_fsat.sat_addr.s_net = ATADDR_ANYNET;
291 ddp->ddp_fsat.sat_addr.s_node = ATADDR_ANYNODE;
292 ddp->ddp_fsat.sat_port = ATADDR_ANYPORT;
298 struct ddpcb *ddp;
302 ddp = malloc(sizeof *ddp, M_PCB, M_NOWAIT | M_ZERO);
303 if (ddp == NULL)
305 DDP_LOCK_INIT(ddp);
306 ddp->ddp_lsat.sat_port = ATADDR_ANYPORT;
308 ddp->ddp_socket = so;
309 so->so_pcb = (caddr_t)ddp;
311 ddp->ddp_next = ddpcb_list;
312 ddp->ddp_prev = NULL;
313 ddp->ddp_pprev = NULL;
314 ddp->ddp_pnext = NULL;
316 ddpcb_list->ddp_prev = ddp;
317 ddpcb_list = ddp;
322 at_pcbdetach(struct socket *so, struct ddpcb *ddp)
326 * We modify ddp, ddp_ports, and the global list.
329 DDP_LOCK_ASSERT(ddp);
334 /* Remove ddp from ddp_ports list. */
335 if (ddp->ddp_lsat.sat_port != ATADDR_ANYPORT &&
336 ddp_ports[ddp->ddp_lsat.sat_port - 1] != NULL) {
337 if (ddp->ddp_pprev != NULL)
338 ddp->ddp_pprev->ddp_pnext = ddp->ddp_pnext;
340 ddp_ports[ddp->ddp_lsat.sat_port - 1] = ddp->ddp_pnext;
341 if (ddp->ddp_pnext != NULL)
342 ddp->ddp_pnext->ddp_pprev = ddp->ddp_pprev;
345 if (ddp->ddp_route.ro_rt)
346 RTFREE(ddp->ddp_route.ro_rt);
348 if (ddp->ddp_prev)
349 ddp->ddp_prev->ddp_next = ddp->ddp_next;
351 ddpcb_list = ddp->ddp_next;
352 if (ddp->ddp_next)
353 ddp->ddp_next->ddp_prev = ddp->ddp_prev;
354 DDP_UNLOCK(ddp);
355 DDP_LOCK_DESTROY(ddp);
356 free(ddp, M_PCB);
369 struct ddpcb *ddp;
383 for (ddp = ddp_ports[to->sat_port - 1]; ddp; ddp = ddp->ddp_pnext) {
384 DDP_LOCK(ddp);
387 if (to->sat_addr.s_net == ddp->ddp_lsat.sat_addr.s_net &&
388 to->sat_addr.s_node == ddp->ddp_lsat.sat_addr.s_node) {
389 DDP_UNLOCK(ddp);
396 to->sat_addr.s_net == ddp->ddp_lsat.sat_addr.s_net) &&
397 ddp->ddp_lsat.sat_addr.s_net ==
399 DDP_UNLOCK(ddp);
406 ntohs(ddp->ddp_lsat.sat_addr.s_net) >=
408 ntohs(ddp->ddp_lsat.sat_addr.s_net) <=
410 DDP_UNLOCK(ddp);
413 DDP_UNLOCK(ddp);
415 return (ddp);