First Commit of Voltha-Go-Controller from Radisys
Change-Id: I8e2e908e7ab09a4fe3d86849da18b6d69dcf4ab0
diff --git a/internal/pkg/types/multicast.go b/internal/pkg/types/multicast.go
new file mode 100755
index 0000000..6b6aac8
--- /dev/null
+++ b/internal/pkg/types/multicast.go
@@ -0,0 +1,104 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package common
+
+// IGMPConfig identifies the IGMP Configuration parameters.
+type IGMPConfig struct {
+ // ProfileID represents IGMP profile ID
+ ProfileID string `json:"ProfileID"`
+ // ProfileName represents IGMP profile Name
+ ProfileName string `json:"ProfileName"`
+ // UnsolicitedTimeOut represents unsolicited timeout.
+ UnsolicitedTimeOut int `json:"UnsolicitedTimeOut"`
+ // MaxResp represents IGMP max response time.
+ MaxResp int `json:"MaxResp"`
+ // KeepAliveInterval represents IGMP keep alive interval.
+ KeepAliveInterval int `json:"KeepAliveInterval"`
+ // KeepAliveCount represents IGMP keep alive count.
+ KeepAliveCount int `json:"KeepAliveCount"`
+ // LastQueryInterval represents IGMP last query interval.
+ LastQueryInterval int `json:"LastQueryInterval"`
+ // LastQueryCount represents IGMP last query count.
+ LastQueryCount int `json:"LastQueryCount"`
+ // FastLeave represents IGMP fast leave enabled or not.
+ FastLeave *bool `json:"FastLeave"`
+ // PeriodicQuery represents IGMP period query interval.
+ PeriodicQuery *bool `json:"PeriodicQuery"`
+ // IgmpCos represents IGMP COS value(0-7).
+ IgmpCos int `json:"IgmpCos"`
+ // WithRAUpLink represents IGMP RA uplink.
+ WithRAUpLink *bool `json:"withRAUpLink"`
+ // WithRADownLink represents IGMP RA downlink.
+ WithRADownLink *bool `json:"withRADownLink"`
+ // IgmpVerToServer represents IGMP version.
+ IgmpVerToServer string `json:"igmpVerToServer"`
+ // IgmpSourceIP represents IGMP src ip.
+ IgmpSourceIP string `json:"igmpSourceIp"`
+}
+
+//MulticastSrcListMode represents mode of source list
+type MulticastSrcListMode string
+
+const (
+ //Include refers to MulticastSrcListMode as include
+ Include MulticastSrcListMode = "include"
+ //Exclude refers to MulticastSrcListMode as exclude
+ Exclude MulticastSrcListMode = "exclude"
+ // StaticGroup refes to the static group name
+ StaticGroup string = "static"
+ // IsStaticYes refes to the static flag value yes
+ IsStaticYes string = "yes"
+ // IsStaticNo refes to the static flag value no
+ IsStaticNo string = "no"
+)
+
+// MulticastGroupProxy identifies source specific multicast(SSM) config.
+type MulticastGroupProxy struct {
+ // Mode represents source list include/exclude
+ Mode MulticastSrcListMode `json:"Mode"`
+ // SourceList represents list of multicast server IP addresses.
+ SourceList []string `json:"SourceList"`
+ // IsStatic flag indicating if the group is a "static" group
+ IsStatic string `json:"IsStatic,omitempty"`
+}
+
+// MVLANProfile identifies the MVLAN profile.
+type MVLANProfile struct {
+ // VLANID represents the Multicast VLAN ID.
+ VLANID int `json:"VLANID"`
+ // ProfileID represents Multicast profile ID
+ ProfileID string `json:"ProfileID"`
+ // ProfileName represents Multicast profile Name
+ ProfileName string `json:"ProfileName"`
+ // PonVLAN represents the vlan, where mcast traffic will be translated at OLT
+ PonVLAN int `json:"PonVLAN"`
+ // Groups represents the MVLAN group information. Key will be group name and value as array of multicast channel IPs.
+ Groups map[string][]string `json:"Groups"`
+ // Proxy represents multicast group proxy info. Key will be group name and value as proxy info
+ Proxy map[string]MulticastGroupProxy `json:"Proxy"`
+ //IsChannelBasedGroup represents if the group is channel based
+ IsChannelBasedGroup bool `json:"IsChannelBasedGroup"`
+ // ActiveIgmpChannelsPerSubscriber represents maximum igmp channels per subscriber can use
+ // Default : 3
+ ActiveIgmpChannelsPerSubscriber int `json:"ActiveIgmpChannelsPerSubscriber"`
+}
+
+// McastConfig the structure for multicast config
+type McastConfig struct {
+ MVLANProfileID string
+ IGMPProfileID string
+ IGMPSrcIP string
+}