本文整理匯總了Golang中github.com/flynn/flynn/flannel/pkg/ip.IP4Net類的典型用法代碼示例。如果您正苦於以下問題:Golang IP4Net類的具體用法?Golang IP4Net怎麽用?Golang IP4Net使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了IP4Net類的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: DelRoute
func (dev *vxlanDevice) DelRoute(subnet ip.IP4Net) error {
route := &netlink.Route{
Scope: netlink.SCOPE_UNIVERSE,
Dst: subnet.ToIPNet(),
Gw: subnet.IP.ToIP(),
}
log.Infof("calling RouteDel: %s", subnet)
return netlink.RouteDel(route)
}
示例2: setupIpMasq
func setupIpMasq(localNet ip.IP4Net, overlayNet ip.IP4Net) error {
ipt, err := ip.NewIPTables()
if err != nil {
return err
}
err = ipt.ClearChain("nat", "FLANNEL")
if err != nil {
return fmt.Errorf("Failed to create/clear FLANNEL chain in NAT table: %v", err)
}
rules := [][]string{
{"FLANNEL", "-s", localNet.String(), "-o", "lo", "-j", "ACCEPT"},
{"FLANNEL", "-s", localNet.String(), "!", "-d", overlayNet.String(), "-j", "MASQUERADE"},
{"POSTROUTING", "-s", localNet.String(), "-j", "FLANNEL"},
}
for _, args := range rules {
log.Info("Adding iptables rule: ", strings.Join(args, " "))
if err := ipt.AppendUnique("nat", args...); err != nil {
return fmt.Errorf("Failed to insert IP masquerade rule: %v", err)
}
}
return nil
}
示例3: allocateSubnet
func (sm *SubnetManager) allocateSubnet() (ip.IP4Net, error) {
log.Infof("Picking subnet in range %s ... %s", sm.config.SubnetMin, sm.config.SubnetMax)
var bag []ip.IP4
sn := ip.IP4Net{IP: sm.config.SubnetMin, PrefixLen: sm.config.SubnetLen}
OuterLoop:
for ; sn.IP <= sm.config.SubnetMax && len(bag) < 100; sn = sn.Next() {
for _, l := range sm.leases {
if sn.Overlaps(l.Network) {
continue OuterLoop
}
}
bag = append(bag, sn.IP)
}
if len(bag) == 0 {
return ip.IP4Net{}, errors.New("out of subnets")
} else {
i := randInt(0, len(bag))
return ip.IP4Net{IP: bag[i], PrefixLen: sm.config.SubnetLen}, nil
}
}
示例4: Configure
func (dev *vxlanDevice) Configure(ipn ip.IP4Net) error {
if err := setAddr4(dev.link, ipn.ToIPNet()); err != nil {
return err
}
if err := netlink.LinkSetUp(dev.link); err != nil {
return fmt.Errorf("failed to set interface %s to UP state: %s", dev.link.Attrs().Name, err)
}
// explicitly add a route since there might be a route for a subnet already
// installed by Docker and then it won't get auto added
route := netlink.Route{
LinkIndex: dev.link.Attrs().Index,
Scope: netlink.SCOPE_UNIVERSE,
Dst: ipn.Network().ToIPNet(),
}
if err := netlink.RouteAdd(&route); err != nil && err != syscall.EEXIST {
return fmt.Errorf("failed to add route (%s -> %s): %v", ipn.Network().String(), dev.link.Attrs().Name, err)
}
return nil
}