package pkg import ( "errors" "strings" ) type UDPProfile struct { ProfileCommon AllowNoPayload string `json:"allow_no_payload"` DatagramLoadBalancing string `json:"datagram_load_balancing"` IdleTimeout string `json:"idle_timeout"` IPDFMode string `json:"ip_df_mode"` IPTOSToClient string `json:"ip_tos_to_client"` IPTTLMode string `json:"ip_ttl_mode"` IPTTLv4 string `json:"ip_ttl_v4"` IPTTLv6 string `json:"ip_ttl_v6"` LinkQOSToClient string `json:"link_qos_to_client"` NoChecksum string `json:"no_checksum"` ProxyMSS string `json:"proxy_mss"` } // ParseUDPProfile : Parse raw string in to UDPProfile structure func ParseUDPProfile(raw string) (*UDPProfile, error) { p := new(UDPProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile udp") { return nil, errors.New("not a udp profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "allow-no-payload": p.AllowNoPayload = strings.Join(f[1:], " ") case "datagram-load-balancing": p.DatagramLoadBalancing = strings.Join(f[1:], " ") case "idle-timeout": p.IdleTimeout = strings.Join(f[1:], " ") case "ip-df-mode": p.IPDFMode = strings.Join(f[1:], " ") case "ip-tos-to-client": p.IPTOSToClient = strings.Join(f[1:], " ") case "ip-ttl-mode": p.IPTTLMode = strings.Join(f[1:], " ") case "ip-ttl-v4": p.IPTTLv4 = strings.Join(f[1:], " ") case "ip-ttl-v6": p.IPTTLv6 = strings.Join(f[1:], " ") case "link-qos-to-client": p.LinkQOSToClient = strings.Join(f[1:], " ") case "no-checksum": p.NoChecksum = strings.Join(f[1:], " ") case "proxy-mss": p.ProxyMSS = strings.Join(f[1:], " ") } } return p, nil }