国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

go實現路由表操作

2019-11-08 03:19:24
字體:
來源:轉載
供稿:網友
//源代碼package comroutingimport ( "fmt" "strconv" "strings")type CRoute_S struct { routeTable map[int]map[int]bool}func CreateCRouter() *CRoute_S { var route CRoute_S route.routeTable = make(map[int]map[int]bool) var maskLen int = 0 for maskLen = 0; maskLen <= 32; maskLen++ { route.routeTable[maskLen] = make(map[int]bool) } return &route}func AddCRouteItem(cr *CRoute_S, PRefix string, maskLen int) bool { if nil == cr || nil == cr.routeTable { return false } rtVal := ipStr2Val(prefix) if 0 > rtVal { return false } if maskLen < 0 { maskLen = 0 } else if maskLen > 32 { maskLen = 32 } rtVal = ipValMasked(rtVal, maskLen) cr.routeTable[maskLen][rtVal] = true return true}func DelCRouteItem(cr *CRoute_S, prefix string, maskLen int) bool { if nil == cr || nil == cr.routeTable { return false } rtVal := ipStr2Val(prefix) if 0 > rtVal { return false } if maskLen < 0 { maskLen = 0 } else if maskLen > 32 { maskLen = 32 } rtVal = ipValMasked(rtVal, maskLen) if _, bExist := cr.routeTable[maskLen][rtVal]; false == bExist { return true } delete(cr.routeTable[maskLen], rtVal) return true}func SearchCRoute(cr *CRoute_S, ip string) bool { if nil == cr || nil == cr.routeTable { return false } rtVal := ipStr2Val(ip) if 0 > rtVal { return false } var maskLen int = 0 for maskLen = 32; maskLen >= 0; maskLen-- { tmpVal := ipValMasked(rtVal, maskLen) if _, bExist := cr.routeTable[maskLen][tmpVal]; bExist { fmt.Printf("SearchCRoute ip=%s match Item %s/n", ip, ipVal2Str(tmpVal)) return true } } fmt.Printf("SearchCRoute ip=%s match Item fail/n", ip) return false}func PrintCRoute(cr *CRoute_S) { if nil == cr || nil == cr.routeTable { return } var maskLen int = 0 for maskLen = 32; maskLen >= 0; maskLen-- { if 0 == len(cr.routeTable[maskLen]) { continue } fmt.Printf("maskLen=%d List As:/n", maskLen) itemSeq := 1 for ipVal, _ := range cr.routeTable[maskLen] { fmt.Printf("%d: %s/n", itemSeq, ipVal2Str(ipVal)) itemSeq++ } }}func ipStr2Val(ip string) int { segs := strings.Split(strings.TrimSpace(ip), ".") if 4 != len(segs) { return -1 } ret := make([]int, 0) for _, segx := range segs { val, err := strconv.Atoi(segx) if nil != err { return -1 } ret = append(ret, val) } rtVal := ret[0]<<24 + ret[1]<<16 + ret[2]<<8 + ret[3] return rtVal}func ipVal2Str(ipVal int) string { s1 := (ipVal & 0xff000000) >> 24 s2 := (ipVal & 0xff0000) >> 16 s3 := (ipVal & 0xff00) >> 8 s4 := (ipVal & 0xff) return fmt.Sprintf("%d.%d.%d.%d", s1, s2, s3, s4)}func ipValMasked(ipVal int, maskLen int) int { rtVal := (ipVal >> uint(32-maskLen)) & 0xffffffff rtVal = rtVal << uint(32-maskLen) return rtVal}//測試代碼package mainimport ( "common/comrouting" "fmt")func main() { router := comrouting.CreateCRouter() comrouting.AddCRouteItem(router, "192.168.0.0", 16) comrouting.AddCRouteItem(router, "192.168.1.0", 24) comrouting.PrintCRoute(router) ret := comrouting.SearchCRoute(router, "192.168.1.0") fmt.Printf("ret=%v/n/n", ret) comrouting.DelCRouteItem(router, "192.168.1.0", 24) comrouting.PrintCRoute(router) ret = comrouting.SearchCRoute(router, "192.168.1.0") fmt.Printf("ret=%v/n", ret)}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 美姑县| 蓬莱市| 合江县| 鹤山市| 定边县| 漯河市| 三穗县| 宿州市| 会东县| 武胜县| 嘉义县| 开原市| 赤水市| 祥云县| 乌兰县| 舞阳县| 北票市| 务川| 梓潼县| 旺苍县| 固阳县| 伊宁市| 抚州市| 武威市| 松阳县| 会同县| 融水| 齐河县| 武鸣县| 白沙| 车险| 房产| 涞水县| 凤凰县| 呈贡县| 广德县| 梓潼县| 贺兰县| 疏附县| 桑日县| 堆龙德庆县|