func New()

in plugins/vpc-branch-pat-eni/config/netconfig.go [56:130]


func New(args *cniSkel.CmdArgs, isAdd bool) (*NetConfig, error) {
	var config netConfigJSON
	err := json.Unmarshal(args.StdinData, &config)
	if err != nil {
		return nil, fmt.Errorf("failed to parse network config: %v", err)
	}

	// Validate if all the required fields are present.
	if config.TrunkName == "" && config.TrunkMACAddress == "" {
		return nil, fmt.Errorf("missing required parameter trunkName or trunkMACAddress")
	}
	if config.BranchVlanID == "" {
		return nil, fmt.Errorf("missing required parameter branchVlanID")
	}
	if isAdd && config.BranchMACAddress == "" {
		return nil, fmt.Errorf("missing required parameter branchMACAddress")
	}

	// Populate NetConfig.
	netConfig := NetConfig{
		NetConf:         config.NetConf,
		TrunkName:       config.TrunkName,
		CleanupPATNetNS: config.CleanupPATNetNS,
	}

	// Parse the trunk MAC address.
	if config.TrunkMACAddress != "" {
		netConfig.TrunkMACAddress, err = net.ParseMAC(config.TrunkMACAddress)
		if err != nil {
			return nil, fmt.Errorf("invalid trunkMACAddress %s", config.TrunkMACAddress)
		}
	}

	// Parse the branch VLAN ID.
	netConfig.BranchVlanID, err = strconv.Atoi(config.BranchVlanID)
	if err != nil {
		return nil, fmt.Errorf("invalid branchVlanID %s", config.BranchVlanID)
	}

	// Parse the optional branch MAC address.
	if config.BranchMACAddress != "" {
		netConfig.BranchMACAddress, err = net.ParseMAC(config.BranchMACAddress)
		if err != nil {
			return nil, fmt.Errorf("invalid branchMACAddress %s", config.BranchMACAddress)
		}
	}

	// Parse the optional branch IP address.
	if config.BranchIPAddress != "" {
		ipAddr, err := vpc.GetIPAddressFromString(config.BranchIPAddress)
		netConfig.BranchIPAddress = *ipAddr
		if err != nil {
			return nil, fmt.Errorf("invalid branchIPAddress %s", config.BranchIPAddress)
		}
	}

	// Parse the optional TAP interface UID and GID.
	if config.Uid != "" {
		netConfig.Uid, err = strconv.Atoi(config.Uid)
		if err != nil {
			return nil, fmt.Errorf("invalid UID %s", config.Uid)
		}
	}

	if config.Gid != "" {
		netConfig.Gid, err = strconv.Atoi(config.Gid)
		if err != nil {
			return nil, fmt.Errorf("invalid GID %s", config.Gid)
		}
	}

	// Validation complete. Return the parsed NetConfig object.
	log.Debugf("Created NetConfig: %+v", config)
	return &netConfig, nil
}