9 #define AF_INET_SDP 27 /* Family for SDP */ |
9 #define AF_INET_SDP 27 /* Family for SDP */ |
10 +#endif |
10 +#endif |
11 |
11 |
12 |
12 |
13 /* |
13 /* |
14 @@ -707,10 +709,16 @@ |
14 @@ -707,10 +709,14 @@ |
15 ailist = getaddrinfo_port(serverflag ? 0 : ServerName, port, &hints); |
15 ailist = getaddrinfo_port(serverflag ? 0 : ServerName, port, &hints); |
16 for (aip = ailist; aip; aip = aip->ai_next) { |
16 for (aip = ailist; aip; aip = aip->ai_next) { |
17 if (kind == K_SDP) { |
17 if (kind == K_SDP) { |
18 +#if (defined(__SVR4) && defined(__sun)) |
18 +#if (defined(__SVR4) && defined(__sun)) |
19 + aip->ai_family = AF_INET; |
|
20 + aip->ai_socktype = SOCK_STREAM; |
|
21 + aip->ai_protocol = PROTO_SDP; |
19 + aip->ai_protocol = PROTO_SDP; |
22 +#else |
20 +#else |
23 if (aip->ai_family == AF_INET || aip->ai_family == AF_INET6) |
21 if (aip->ai_family == AF_INET || aip->ai_family == AF_INET6) |
24 aip->ai_family = AF_INET_SDP; |
22 aip->ai_family = AF_INET_SDP; |
25 else |
23 else |
78 + solaris_fini(); |
76 + solaris_fini(); |
79 +#endif |
77 +#endif |
80 return 0; |
78 return 0; |
81 } |
79 } |
82 |
80 |
83 @@ -617,14 +634,19 @@ |
81 @@ -617,14 +634,21 @@ |
84 for (i = 0; i < P_N; ++i) |
82 for (i = 0; i < P_N; ++i) |
85 if (ParInfo[i].index != i) |
83 if (ParInfo[i].index != i) |
86 error(BUG, "initialize: ParInfo: out of order: %d", i); |
84 error(BUG, "initialize: ParInfo: out of order: %d", i); |
87 +#if (defined(__SVR4) && defined(__sun)) |
85 +#if (defined(__SVR4) && defined(__sun)) |
88 + solaris_init(); |
86 + solaris_init(); |
|
87 + Req.affinity = -1; /* default no affinity */ |
|
88 + RReq.affinity = -1; |
89 +#else |
89 +#else |
90 ProcStatFD = open("/proc/stat", 0); |
90 ProcStatFD = open("/proc/stat", 0); |
91 if (ProcStatFD < 0) |
91 if (ProcStatFD < 0) |
92 error(SYS, "cannot open /proc/stat"); |
92 error(SYS, "cannot open /proc/stat"); |
93 +#endif |
93 +#endif |
127 |
127 |
128 +#if !(defined(__SVR4) && defined(__sun)) |
128 +#if !(defined(__SVR4) && defined(__sun)) |
129 if (!fp) |
129 if (!fp) |
130 error(0, "cannot open /proc/cpuinfo"); |
130 error(0, "cannot open /proc/cpuinfo"); |
131 cpu[0] = '\0'; |
131 cpu[0] = '\0'; |
132 @@ -1732,6 +1760,7 @@ |
132 @@ -1732,6 +1762,7 @@ |
133 |
133 |
134 /* CPU speed */ |
134 /* CPU speed */ |
135 speed[0] = '\0'; |
135 speed[0] = '\0'; |
136 + |
136 + |
137 if (!mixed) { |
137 if (!mixed) { |
138 int n = strlen(cpu); |
138 int n = strlen(cpu); |
139 if (n < 3 || cpu[n-2] != 'H' || cpu[n-1] != 'z') { |
139 if (n < 3 || cpu[n-2] != 'H' || cpu[n-1] != 'z') { |
140 @@ -1745,7 +1774,24 @@ |
140 @@ -1745,7 +1776,24 @@ |
141 } |
141 } |
142 } |
142 } |
143 } |
143 } |
144 +#else |
144 +#else |
145 + cpu[0] = '\0'; |
145 + cpu[0] = '\0'; |
160 +#endif |
160 +#endif |
161 + |
161 + |
162 /* Number of CPUs */ |
162 /* Number of CPUs */ |
163 if (cpus == 1) |
163 if (cpus == 1) |
164 count[0] = '\0'; |
164 count[0] = '\0'; |
165 @@ -2615,9 +2661,15 @@ |
165 @@ -2615,9 +2663,17 @@ |
166 static void |
166 static void |
167 set_affinity(void) |
167 set_affinity(void) |
168 { |
168 { |
169 +#if !(defined(__SVR4) && defined(__sun)) |
169 +#if !(defined(__SVR4) && defined(__sun)) |
170 cpu_set_t set; |
170 cpu_set_t set; |
171 +#endif |
171 +#endif |
172 int a = Req.affinity; |
172 int a = Req.affinity; |
173 |
173 |
174 +#if defined(__SVR4) && defined(__sun) |
174 +#if defined(__SVR4) && defined(__sun) |
|
175 + if (a == -1) /* no affinity by default */ |
|
176 + return; |
175 + if (processor_bind(P_LWPID, P_MYID, a, NULL) != 0) |
177 + if (processor_bind(P_LWPID, P_MYID, a, NULL) != 0) |
176 + error(SYS, "cannot set processor affinity (cpu %d)", a); |
178 + error(SYS, "cannot set processor affinity (cpu %d)", a); |
177 +#else |
179 +#else |
178 if (!a) |
180 if (!a) |
179 return; |
181 return; |
180 CPU_ZERO(&set); |
182 CPU_ZERO(&set); |
181 @@ -2624,6 +2676,7 @@ |
183 @@ -2624,6 +2680,7 @@ |
182 CPU_SET(a-1, &set); |
184 CPU_SET(a-1, &set); |
183 if (sched_setaffinity(0, sizeof(set), &set) < 0) |
185 if (sched_setaffinity(0, sizeof(set), &set) < 0) |
184 error(SYS, "cannot set processor affinity (cpu %d)", a-1); |
186 error(SYS, "cannot set processor affinity (cpu %d)", a-1); |
185 +#endif |
187 +#endif |
186 } |
188 } |
187 |
189 |
188 |
190 |
189 @@ -2771,9 +2824,36 @@ |
191 @@ -2771,9 +2828,36 @@ |
190 /* |
192 /* |
191 * Get various temporal parameters. |
193 * Get various temporal parameters. |
192 */ |
194 */ |
193 +#if (defined(__SVR4) && defined(__sun)) |
195 +#if (defined(__SVR4) && defined(__sun)) |
194 + |
196 + |
452 |
454 |
453 +#endif |
455 +#endif |
454 |
456 |
455 /* |
457 /* |
456 * Function prototypes. |
458 * Function prototypes. |
457 @@ -352,7 +356,11 @@ |
459 @@ -298,13 +302,19 @@ |
|
460 if (bind(lfd, (SA *)&laddr, sizeof(laddr)) < 0) |
|
461 error(SYS, "bind INET failed"); |
|
462 |
|
463 + /* |
|
464 + * OFED generic fix - listen() should be setup first before sending server |
|
465 + * port message to the client. There is a window that the client's |
|
466 + * connect() would fail after receiving the "server port" message if the |
|
467 + * server hasn't completed the listen(). |
|
468 + */ |
|
469 + if (listen(lfd, 1) < 0) |
|
470 + error(SYS, "listen failed"); |
|
471 + |
|
472 port = get_socket_port(lfd); |
|
473 encode_uint32(&port, port); |
|
474 send_mesg(&port, sizeof(port), "TCP IPv4 server port"); |
|
475 |
|
476 - if (listen(lfd, 1) < 0) |
|
477 - error(SYS, "listen failed"); |
|
478 - |
|
479 rlen = sizeof(raddr); |
|
480 fd = accept(lfd, (SA *)&raddr, &rlen); |
|
481 if (fd < 0) |
|
482 @@ -352,7 +362,11 @@ |
458 SS sockaddr; |
483 SS sockaddr; |
459 socklen_t socklen; |
484 socklen_t socklen; |
460 |
485 |
461 +#if (defined(__SVR4) && defined(__sun)) |
486 +#if (defined(__SVR4) && defined(__sun)) |
462 + sockfd = socket(PF_RDS, SOCK_SEQPACKET, 0); |
487 + sockfd = socket(PF_RDS, SOCK_SEQPACKET, 0); |
464 sockfd = socket(AF_INET_RDS, SOCK_SEQPACKET, 0); |
489 sockfd = socket(AF_INET_RDS, SOCK_SEQPACKET, 0); |
465 +#endif |
490 +#endif |
466 if (sockfd < 0) |
491 if (sockfd < 0) |
467 error(SYS, "socket failed"); |
492 error(SYS, "socket failed"); |
468 setsockopt_one(sockfd, SO_REUSEADDR); |
493 setsockopt_one(sockfd, SO_REUSEADDR); |
469 @@ -373,7 +381,11 @@ |
494 @@ -373,7 +387,11 @@ |
470 struct sockaddr_in *sap = (struct sockaddr_in *)addr; |
495 struct sockaddr_in *sap = (struct sockaddr_in *)addr; |
471 |
496 |
472 memset(sap, 0, sizeof(*sap)); |
497 memset(sap, 0, sizeof(*sap)); |
473 +#if (defined(__SVR4) && defined(__sun)) |
498 +#if (defined(__SVR4) && defined(__sun)) |
474 + sap->sin_family = AF_INET_OFFLOAD; |
499 + sap->sin_family = AF_INET_OFFLOAD; |
476 sap->sin_family = AF_INET; |
501 sap->sin_family = AF_INET; |
477 +#endif |
502 +#endif |
478 inet_pton(AF_INET, host, &sap->sin_addr.s_addr); |
503 inet_pton(AF_INET, host, &sap->sin_addr.s_addr); |
479 sap->sin_port = htons(port); |
504 sap->sin_port = htons(port); |
480 *len = sizeof(struct sockaddr_in); |
505 *len = sizeof(struct sockaddr_in); |
481 @@ -431,6 +443,14 @@ |
506 @@ -431,6 +449,14 @@ |
482 |
507 |
483 if (getsockname(fd, (SA *)&sa, &salen) < 0) |
508 if (getsockname(fd, (SA *)&sa, &salen) < 0) |
484 error(SYS, "getsockname failed"); |
509 error(SYS, "getsockname failed"); |
485 +#if (defined(__SVR4) && defined(__sun)) |
510 +#if (defined(__SVR4) && defined(__sun)) |
486 + /* |
511 + /* |