2007年11月23日

[linux-users:107780] Re: apcupsd 3.14.2 - ipv6 patch

吉藤@USAGI/WIDEプロジェクトです。
こんばんは。

> > ふとした事を切っ掛けに apcupsd 3.14.2 のipv6パッチを作成してみました。

素敵です。:-)

まだ深く見てないのですが、一見したコメントを。


In article <20071123014111.79b83405.ng@xxxxx> (at Fri, 23 Nov 2007 01:41:48 +0900), NOGUCHI Shoji <ng@xxxxx> says:

> diff -urN apcupsd-3.14.2/include/nis.h apcupsd-3.14.2-ipv6/include/nis.h
> --- apcupsd-3.14.2/include/nis.h 2005-06-11 22:55:35.000000000 +0900
> +++ apcupsd-3.14.2-ipv6/include/nis.h 2007-11-17 22:49:35.000000000 +0900
> @@ -20,7 +20,6 @@
> * MA 02111-1307, USA.
> */
>
> -extern struct sockaddr_in tcp_serv_addr; /* socket information */
> extern int net_errno; /* error number -- not yet implemented */
> extern char *net_errmsg; /* pointer to error message */
> extern char net_errbuf[256]; /* error message buffer for messages */
> @@ -58,4 +57,7 @@
> void net_close(int sockfd);
>
> /* Wait for and accept a new TCP connection */
> -int net_accept(int fd, struct sockaddr_in *cli_addr);
> +int net_accept(int fd, struct sockaddr_storage *cli_addr);

int net_accept(int fd, struct sockaddr *cli_addr);

sockaddr_storage{}は純粋に格納用領域のためで、ポインタとしては
つかわないほうがよいスタイルです。

> diff -urN apcupsd-3.14.2/src/apcaccess.c apcupsd-3.14.2-ipv6/src/apcaccess.c
> --- apcupsd-3.14.2/src/apcaccess.c 2007-08-04 00:17:15.000000000 +0900
> +++ apcupsd-3.14.2-ipv6/src/apcaccess.c 2007-11-17 22:49:35.000000000 +0900
> @@ -28,7 +28,7 @@
> extern char *net_errmsg;
>
> /* Default values for contacting daemon */
> -static char *host = "localhost";
> +static char *host = NULL;
> static int port = NISPORT;
>
> /* Get and print status from apcupsd NIS server */

static なので NULL はいらないですね。趣味ですけど。

> @@ -82,16 +82,13 @@
> char *p;
>
> host = argv[2];
> - p = strchr(host, ':');
> + p = strrchr(host, ':');
> if (p) {
> *p++ = 0;
> port = atoi(p);

IPv6では、特にportを指定する場合は、[addr]:port
のような形式が推奨です。

> diff -urN apcupsd-3.14.2/src/apcnis.c apcupsd-3.14.2-ipv6/src/apcnis.c
> --- apcupsd-3.14.2/src/apcnis.c 2006-08-14 01:59:52.000000000 +0900
> +++ apcupsd-3.14.2-ipv6/src/apcnis.c 2007-11-18 22:35:29.000000000 +0900
:
> - for (tlog = 0; bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0;
> - tlog -= 5 * 60) {
> - if (tlog <= 0) {
> - tlog = 60 * 60;
> + if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
> log_event(ups, LOG_ERR, "apcserver: cannot bind port %d. ERR=%s",
> ups->statusport, strerror(errno));

bind()の前に、

#if defined(IPV6_V6ONLY) && defined(AF_INET6)
if (ai->ai_family == AF_INET6) {
int on = 1;
setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
}
#endif

とりいそぎ。

--
YOSHIFUJI Hideaki @ USAGI Project <yoshfuji@xxxxx>
GPG-FP : 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA


投稿者 xml-rpc : 2007年11月23日 02:11
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/66803
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。