From owner-freebsd-net@FreeBSD.ORG Thu Apr 12 23:54:06 2012 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 537831065670 for ; Thu, 12 Apr 2012 23:54:06 +0000 (UTC) (envelope-from andy@fud.org.nz) Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by mx1.freebsd.org (Postfix) with ESMTP id 279E68FC14 for ; Thu, 12 Apr 2012 23:54:06 +0000 (UTC) Received: by pbcwz17 with SMTP id wz17so3209618pbc.13 for ; Thu, 12 Apr 2012 16:53:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type:x-gm-message-state; bh=1MbdCzXGrfqFXK95taioyMWTWWXk9OSRXIljRWVW89M=; b=U/yyqav6CfsBsfWh6Wneg2i1JYKk42kD6l4LyjOeFsspPCvZwqTt3YDI4vH+tuwX9C O+wcaGrUSe67FMDM3kwHa1vJaHjTbNDTMJ2qh0M7055oTUzTJZPwkmT/5FRdzjlmBrAf pHdew5o4Bl+4sRg1DXvBawMgfXWIyCWQ1ri6/WGfv+ZTTwSjv68pVTbZH6il/9fH51aR CWa2lwnIk+k27DlOFkkVEz+Bvo6srM4o2yAAI36cPDwo1RbZirBSvSdIX6AY0YU7iqIq wmYIHMdQ7W0WNRc7NmZxMdmpxTdFc7oIsoTfNHtwb4NIB75hCAqfsmfIE0V/dapNIknB 6jRg== MIME-Version: 1.0 Received: by 10.68.195.103 with SMTP id id7mr973777pbc.98.1334274839867; Thu, 12 Apr 2012 16:53:59 -0700 (PDT) Sender: andy@fud.org.nz Received: by 10.68.33.230 with HTTP; Thu, 12 Apr 2012 16:53:59 -0700 (PDT) Date: Fri, 13 Apr 2012 11:53:59 +1200 X-Google-Sender-Auth: Oh9Q4EOxQru067ZgUR14G0GsfSs Message-ID: From: Andrew Thompson To: freebsd-net Content-Type: text/plain; charset=ISO-8859-1 X-Gm-Message-State: ALoCoQl2ljFWUkwfu8m9Ivez0/p2LMNJWvdieYtQvog9MuLgGeyqC5HzcTsQxkLiypaivNS4pAga Subject: getifaddrs & ipv6 scope X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Apr 2012 23:54:06 -0000 Hi, I have noticed that getifaddrs() does not have sin6_scope_id set to the interface id for link local addresses on AF_INET6 types. Running the following program gives different results on Linux FreeBSD: dev: bge0 address: scope 0 dev: xl0 address: scope 0 dev: lo0 address: <::1> scope 0 dev: lo0 address: scope 0 Linux: dev: lo address: <::1> scope 0 dev: eth1 address: <2404:130:0:1000:204:75ff:febc:b8f0> scope 0 dev: eth1 address: scope 2 dev: eth0 address: scope 3 Should FreeBSD be setting sin6_scope_id? Andrew ---- #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { struct ifaddrs *ifaddr, *ifa; char host[NI_MAXHOST]; int rc; if (getifaddrs(&ifaddr) == -1) { perror("getifaddrs"); exit(EXIT_FAILURE); } for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)ifa->ifa_addr; if (ifa->ifa_addr == NULL) continue; if (ifa->ifa_addr->sa_family != AF_INET6) continue; rc = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (rc != 0) { printf("getnameinfo() failed: %s\n", gai_strerror(rc)); exit(EXIT_FAILURE); } printf("dev: %-8s address: <%s> scope %d\n", ifa->ifa_name, host, in6->sin6_scope_id); } freeifaddrs(ifaddr); exit(EXIT_SUCCESS); }