Lines Matching refs:ps

272 	struct pfpsock *ps;
320 ps = kmem_zalloc(sizeof (*ps), kmflags);
321 if (ps == NULL) {
326 ps->ps_type = type;
327 ps->ps_proto = proto;
328 rw_init(&ps->ps_bpflock, NULL, RW_DRIVER, NULL);
329 mutex_init(&ps->ps_lock, NULL, MUTEX_DRIVER, NULL);
340 return ((sock_lower_handle_t)ps);
360 struct pfpsock *ps;
368 ps = arg;
369 if (ps->ps_flow_ctrld) {
370 ps->ps_flow_ctrl_drops++;
371 ps->ps_stats.tp_drops++;
377 if (mac_header_info(ps->ps_mh, mp, &hdr) != 0) {
381 ps->ps_stats.tp_drops++;
387 if (mac_type(ps->ps_mh) == DL_ETHER &&
415 if ((ps->ps_proto != 0) && (ps->ps_proto != hdr.mhi_bindsap)) {
421 ps->ps_stats.tp_drops++;
439 if (ps->ps_bpf.bf_len != 0) {
450 rw_enter(&ps->ps_bpflock, RW_READER);
451 if (bpf_filter(ps->ps_bpf.bf_insns, buffer,
453 rw_exit(&ps->ps_bpflock);
454 ps->ps_stats.tp_drops++;
459 rw_exit(&ps->ps_bpflock);
462 if (ps->ps_type == SOCK_DGRAM) {
472 if (ps->ps_auxdata) {
487 ps->ps_stats.tp_drops++;
503 sol = &ps->ps_sock;
526 if (ps->ps_auxdata) {
552 (void) gethrestime(&ps->ps_timestamp);
554 ps->ps_upcalls->su_recv(ps->ps_upper, mp0, hdr.mhi_pktsize, 0,
558 ps->ps_stats.tp_packets++;
561 mutex_enter(&ps->ps_lock);
563 ps->ps_upcalls->su_recv(ps->ps_upper, NULL, 0, 0,
566 ps->ps_flow_ctrld = B_TRUE;
568 mutex_exit(&ps->ps_lock);
569 ps->ps_stats.tp_drops++;
587 struct pfpsock *ps;
591 ps = (struct pfpsock *)handle;
592 if (ps->ps_bound)
606 mutex_enter(&ps->ps_lock);
607 if (ps->ps_mh != 0) {
608 mutex_exit(&ps->ps_lock);
612 ps->ps_mh = mh;
613 ps->ps_mch = mch;
614 mutex_exit(&ps->ps_lock);
620 sol = &ps->ps_sock;
624 sol->sll_halen = mac_addr_len(ps->ps_mh);
625 mac_unicast_primary_get(ps->ps_mh, sol->sll_addr);
626 mac_sdu_get(ps->ps_mh, NULL, &ps->ps_max_sdu);
627 ps->ps_linkid = addr_ll->sll_ifindex;
629 error = mac_promisc_add(ps->ps_mch, MAC_CLIENT_PROMISC_ALL,
630 pfp_packet, ps, &ps->ps_phd, MAC_PROMISC_FLAGS_VLAN_TAG_STRIP);
632 ps->ps_promisc = MAC_CLIENT_PROMISC_ALL;
633 ps->ps_bound = B_TRUE;
644 struct pfpsock *ps;
646 ps = (struct pfpsock *)lower;
647 ps->ps_upper = upper;
648 ps->ps_upcalls = upcalls;
661 struct pfpsock *ps;
664 ps = (struct pfpsock *)handle;
676 *((int32_t *)optval) = ps->ps_rcvbuf;
740 struct pfpsock *ps;
752 ps = (struct pfpsock *)handle;
753 mh = ps->ps_mh;
754 mch = ps->ps_mch;
755 maxsdu = ps->ps_max_sdu;
764 if (!ps->ps_bound) {
768 sol = &ps->ps_sock;
787 sll = &ps->ps_sock;
820 if (ps->ps_type == SOCK_DGRAM) {
848 ASSERT(mch != ps->ps_mch);
849 ASSERT(mh != ps->ps_mh);
871 struct pfpsock *ps;
873 ps = (struct pfpsock *)handle;
875 mutex_enter(&ps->ps_lock);
876 ps->ps_flow_ctrld = B_FALSE;
877 mutex_exit(&ps->ps_lock);
908 struct pfpsock *ps;
912 ps = (struct pfpsock *)handle;
945 tival.tv_sec = (time_t)ps->ps_timestamp.tv_sec;
946 tival.tv_usec = ps->ps_timestamp.tv_nsec / 1000;
977 if (ps->ps_promisc == MAC_CLIENT_PROMISC_ALL)
983 if (ps->ps_promisc == MAC_CLIENT_PROMISC_ALL)
988 if (linkid != ps->ps_linkid) {
995 error = pfp_set_promisc(ps, mtype);
1000 if (linkid != ps->ps_linkid) {
1007 error = pfp_set_promisc(ps, mtype);
1112 struct pfpsock *ps = (struct pfpsock *)handle;
1114 if (ps->ps_phd != 0) {
1115 mac_promisc_remove(ps->ps_phd);
1116 ps->ps_phd = 0;
1119 if (ps->ps_mch != 0) {
1120 mac_client_close(ps->ps_mch, 0);
1121 ps->ps_mch = 0;
1124 if (ps->ps_mh != 0) {
1125 mac_close(ps->ps_mh);
1126 ps->ps_mh = 0;
1129 kmem_free(ps, sizeof (*ps));
1198 struct pfpsock *ps;
1202 ps = (struct pfpsock *)handle;
1206 if (*optlenp < sizeof (ps->ps_stats)) {
1210 *optlenp = sizeof (ps->ps_stats);
1211 bcopy(&ps->ps_stats, optval, sizeof (ps->ps_stats));
1219 tpss.tp_packets = ps->ps_stats.tp_packets;
1220 tpss.tp_drops = ps->ps_stats.tp_drops;
1248 struct pfpsock *ps;
1252 ps = (struct pfpsock *)handle;
1253 if (!ps->ps_bound)
1258 if (!ps->ps_bound)
1261 if (ps->ps_linkid != mreq.mr_ifindex)
1269 if (mreq.mr_alen != ps->ps_sock.sll_halen)
1272 error = mac_multicast_add(ps->ps_mch, mreq.mr_address);
1276 error = pfp_set_promisc(ps, MAC_CLIENT_PROMISC_ALL);
1280 error = pfp_set_promisc(ps, MAC_CLIENT_PROMISC_MULTI);
1288 if (mreq.mr_alen != ps->ps_sock.sll_halen)
1291 mac_multicast_remove(ps->ps_mch, mreq.mr_address);
1295 if (ps->ps_promisc != MAC_CLIENT_PROMISC_ALL)
1297 error = pfp_set_promisc(ps,
1302 if (ps->ps_promisc != MAC_CLIENT_PROMISC_MULTI)
1304 error = pfp_set_promisc(ps,
1313 ps->ps_auxdata = (opt != 0);
1340 struct pfpsock *ps;
1345 ps = (struct pfpsock *)handle;
1374 rw_enter(&ps->ps_bpflock, RW_WRITER);
1375 pfp_release_bpf(ps);
1376 ps->ps_bpf.bf_insns = fcode;
1377 ps->ps_bpf.bf_len = size;
1378 rw_exit(&ps->ps_bpflock);
1387 pfp_release_bpf(ps);
1396 ps->ps_upcalls->su_set_proto_props(ps->ps_upper, &sopp);
1397 ps->ps_rcvbuf = size;
1479 pfp_release_bpf(struct pfpsock *ps)
1481 if (ps->ps_bpf.bf_len != 0) {
1482 kmem_free(ps->ps_bpf.bf_insns, ps->ps_bpf.bf_len);
1483 ps->ps_bpf.bf_len = 0;
1484 ps->ps_bpf.bf_insns = NULL;
1496 pfp_set_promisc(struct pfpsock *ps, mac_client_promisc_type_t turnon)
1506 if (turnon == ps->ps_promisc)
1509 if (ps->ps_phd != 0) {
1510 mac_promisc_remove(ps->ps_phd);
1511 ps->ps_phd = 0;
1518 if (ps->ps_promisc != MAC_CLIENT_PROMISC_FILTERED) {
1519 ps->ps_promisc = MAC_CLIENT_PROMISC_FILTERED;
1527 error = mac_promisc_add(ps->ps_mch, turnon, pfp_packet, ps,
1528 &ps->ps_phd, flags);
1530 ps->ps_promisc = turnon;