2011-11-24 13 views
19

Çeşitli uygulamalar için IPv6 desteğini uygulamaya çalışıyorum, ancak bu 2 alanın ne olduğunu merak ettim. Burada bu kadar az soru var, bu yüzden doğru anladığımdan emin değilim. kapsam kimliği (sin6_scope_id) HakkındaIPv4 istemci/sunucu uygulamalarında IPv6 desteği ekleme - sin6_flowinfo ve sin6_scope_id alanları?

  • - kuyu, Q1, Q2, Q3 ve Q4 bana kapsamı Kimliği hakkında fikir verdi ve ben bunu elde düşünüyorum. Bu yüzden, kapsam kimliğini yapılandırılabilir yapmak için bir tane daha yapılandırma parametresi eklemem gerekecek. (Bunu buraya eklemeye karar verdim, birisinin bununla ilgilenmesi durumunda). Kısa bir süre - kapsam kimliği, trafiğin üstesinden gelmesi gereken aygıtın hangisi olduğunu belirlemek için gereklidir - çünkü aynı IP ile, ancak farklı (arabirim?) Kimliğine sahip birkaç arabirim olabilir. Çok uzak çok iyi.
  • Ama nasıl hakkında "bilgi akış" (sin6_flowinfo)
    • için nedir? Bunun hakkında ilginç bir şey bulamadım. RFC'u okudum ama bana hiç yardımcı olmadı.
    • sin6_flowinfo için bazı olası değerler var mı (örneğin - bir şey ifade eden bayraklar gibi birkaç değer) veya sin6_scope_id gibi - cihaza bağlı olarak bağlanmaya çalıştığım herhangi bir değer olabilir mi? (Eğer
    • Ben hiç bu konuda endişe mı, yoksa sadece 0 (Beej's Guide to Network Programming olduğu gibi bırakın Gözat. Ve evet, bunun işe yaradığını, o çalıştım, ama yalnızca bu durumda çalıştığını emin değilim Bu, bazı ağ yapılandırmasına bağlıdır) veya 0
    • olarak ayarlanmışsa ya da belki de yapılandırılabilir yapmalıyım, yani bir tane daha yapılandırma seçeneği eklemeli ve kullanıcının bu değeri tanımlamasına izin verir mi?
    • google -ing "sin6_flowinfo" bana yapı tanımlarını ve man sayfalarını verir, bu alan hakkında yararlı hiçbir şey yok .. Herhangi bir ilginç kaynak var mı? (Anlaşılamaz bir ... not RFC: D)

DÜZENLEME: RFC: IPv6 Flow Label Specification, IETF draft: Flow Label as Transport-Layer Nonce, Practical guide for solaris ve wikipedia: Eh, @glglgl 'ın cevabı sonrasında ve ipucu sonra sin6_flowinfo eskimiş olabileceğini, bazı ilginç kaynakları bulundu.
Bu alan eski değil (veya bunu doğrulayan bir kaynak bulamadım), ancak değer yeterince iyi olduğu için 0 gibi görünüyor.

+1

İndirgemeyle ilgili yorumları kaldırdım - bu mükemmel bir soru, endişelenme. – caf

cevap

6

Gitmenin en iyi yolu getaddrinfo() kullanmaktır.

sözde kod:

struct addrinfo *restrict hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM }; 
struct addrinfo * res, r; 
if (0 == getaddrinfo("foo.bar.baz", "http", &hints, &res)) { 
    for (r=res; r; r=r->ai_next) { 
     sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol); 
     connect(sock, r->ai_addr, r->ai_addrlen); 
     if error: continue 
     break 
    } 
} 
freeaddrinfo(res); 

Bu senden endişe yaklaşık sin6_scope_id alacak; Bu, fe80::1234:56ff:fe78:9abc%eth2 gibi bağlantı yerel adresleriniz dışında, normal olarak 0'dur. Bu eth2 doğru kapsam kimliğine dönüştürülür.

sin6_flowinfo artık kullanılmıyor (AFAIK) ve sonuçta ortaya çıkan struct addrinfo's ai_addr içinde 0 olarak ayarlanmış.

+0

Evet, bu seçeneği biliyorum ve ekledim, ancak her seçeneği manuel olarak ayarlamak için bir olasılık eklemek istiyorum. Ve ben sin6_flowinfo'da sıkıştım. 'Sin6_flowinfo' ile ilgili linki daha sonra okuyacağım, ancak eğer eskiyse ve 0 'ı bırakabiliyorum, bu mükemmel olurdu. Bir kez daha teşekkürler :) –

+0

Eh, uygun bir kaynak bulamadım ki, bu eski, ama ben '0' değeri ile katılıyorum. Sorgularımda yayınlayacağım bazı ilginç bağlantılar buldum, kendimi göndermek yerine seninkini kabul etmeliyim. Yardım için teşekkürler. –

+1

@KirilKirov Haklısınız: eskimenin tam tersi: Tam olarak ne yapmaları gerektiğini bilmiyorlar ;-) – glglgl

İlgili konular