903 }
904 if (pconnp != NULL) {
905 pconnp->conn_next = connp;
906 connp->conn_prev = pconnp;
907 } else {
908 connfp->connf_head = connp;
909 }
910 if (nconnp != NULL) {
911 connp->conn_next = nconnp;
912 nconnp->conn_prev = connp;
913 }
914 connp->conn_fanout = connfp;
915 connp->conn_flags = (connp->conn_flags & ~IPCL_REMOVED) | IPCL_BOUND;
916 CONN_INC_REF(connp);
917 mutex_exit(&connfp->connf_lock);
918 }
919
920 void
921 ipcl_hash_insert_wildcard(connf_t *connfp, conn_t *connp)
922 {
923 conn_t **list, *prev, *next;
924 conn_t *pconnp = NULL, *nconnp;
925 boolean_t isv4mapped = IN6_IS_ADDR_V4MAPPED(&connp->conn_laddr_v6);
926
927 IPCL_HASH_REMOVE(connp);
928 mutex_enter(&connfp->connf_lock);
929 nconnp = connfp->connf_head;
930 pconnp = NULL;
931 while (nconnp != NULL) {
932 if (IN6_IS_ADDR_V4MAPPED_ANY(&nconnp->conn_laddr_v6) &&
933 isv4mapped && connp->conn_lport == nconnp->conn_lport)
934 break;
935 if (IN6_IS_ADDR_UNSPECIFIED(&nconnp->conn_laddr_v6) &&
936 (isv4mapped ||
937 connp->conn_lport == nconnp->conn_lport))
938 break;
939
940 pconnp = nconnp;
941 nconnp = nconnp->conn_next;
942 }
943 if (pconnp != NULL) {
|
903 }
904 if (pconnp != NULL) {
905 pconnp->conn_next = connp;
906 connp->conn_prev = pconnp;
907 } else {
908 connfp->connf_head = connp;
909 }
910 if (nconnp != NULL) {
911 connp->conn_next = nconnp;
912 nconnp->conn_prev = connp;
913 }
914 connp->conn_fanout = connfp;
915 connp->conn_flags = (connp->conn_flags & ~IPCL_REMOVED) | IPCL_BOUND;
916 CONN_INC_REF(connp);
917 mutex_exit(&connfp->connf_lock);
918 }
919
920 void
921 ipcl_hash_insert_wildcard(connf_t *connfp, conn_t *connp)
922 {
923 conn_t *pconnp = NULL, *nconnp;
924 boolean_t isv4mapped = IN6_IS_ADDR_V4MAPPED(&connp->conn_laddr_v6);
925
926 IPCL_HASH_REMOVE(connp);
927 mutex_enter(&connfp->connf_lock);
928 nconnp = connfp->connf_head;
929 pconnp = NULL;
930 while (nconnp != NULL) {
931 if (IN6_IS_ADDR_V4MAPPED_ANY(&nconnp->conn_laddr_v6) &&
932 isv4mapped && connp->conn_lport == nconnp->conn_lport)
933 break;
934 if (IN6_IS_ADDR_UNSPECIFIED(&nconnp->conn_laddr_v6) &&
935 (isv4mapped ||
936 connp->conn_lport == nconnp->conn_lport))
937 break;
938
939 pconnp = nconnp;
940 nconnp = nconnp->conn_next;
941 }
942 if (pconnp != NULL) {
|