Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2018-present Open Networking Foundation |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package org.onosproject.segmentrouting.cli; |
| 17 | |
| 18 | import com.google.common.collect.Sets; |
Ray Milkey | 86ad7bb | 2018-09-27 12:32:28 -0700 | [diff] [blame] | 19 | import org.apache.karaf.shell.api.action.Argument; |
| 20 | import org.apache.karaf.shell.api.action.Command; |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 21 | import org.apache.karaf.shell.api.action.Completion; |
Ray Milkey | 7a2dee5 | 2018-09-28 10:58:28 -0700 | [diff] [blame] | 22 | import org.apache.karaf.shell.api.action.lifecycle.Service; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 23 | import org.onlab.packet.VlanId; |
| 24 | import org.onosproject.cli.AbstractShellCommand; |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 25 | import org.onosproject.cli.PlaceholderCompleter; |
| 26 | import org.onosproject.cli.net.DeviceIdCompleter; |
| 27 | import org.onosproject.cli.net.PortNumberCompleter; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 28 | import org.onosproject.net.DeviceId; |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 29 | import org.onosproject.segmentrouting.xconnect.api.XconnectEndpoint; |
| 30 | import org.onosproject.segmentrouting.xconnect.api.XconnectPortEndpoint; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 31 | import org.onosproject.segmentrouting.xconnect.api.XconnectService; |
| 32 | |
| 33 | import java.util.Set; |
| 34 | |
| 35 | /** |
| 36 | * Creates Xconnect. |
| 37 | */ |
Ray Milkey | 7a2dee5 | 2018-09-28 10:58:28 -0700 | [diff] [blame] | 38 | @Service |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 39 | @Command(scope = "onos", name = "sr-xconnect-add", description = "Create Xconnect") |
| 40 | public class XconnectAddCommand extends AbstractShellCommand { |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 41 | private static final String EP_DESC = "Can be a physical port number or a load balancer key. " + |
| 42 | "Use integer to specify physical port number. " + |
| 43 | "Use " + XconnectPortEndpoint.LB_KEYWORD + "key to specify load balancer key"; |
| 44 | |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 45 | @Argument(index = 0, name = "deviceId", |
| 46 | description = "Device ID", |
| 47 | required = true, multiValued = false) |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 48 | @Completion(DeviceIdCompleter.class) |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 49 | private String deviceIdStr; |
| 50 | |
| 51 | @Argument(index = 1, name = "vlanId", |
| 52 | description = "VLAN ID", |
| 53 | required = true, multiValued = false) |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 54 | @Completion(PlaceholderCompleter.class) |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 55 | private String vlanIdStr; |
| 56 | |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 57 | @Argument(index = 2, name = "ep1", |
| 58 | description = "First endpoint. " + EP_DESC, |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 59 | required = true, multiValued = false) |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 60 | @Completion(PortNumberCompleter.class) |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 61 | private String ep1Str; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 62 | |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 63 | @Argument(index = 3, name = "ep2", |
| 64 | description = "Second endpoint. " + EP_DESC, |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 65 | required = true, multiValued = false) |
Ray Milkey | b52acf3 | 2018-10-05 10:17:34 -0700 | [diff] [blame] | 66 | @Completion(PortNumberCompleter.class) |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 67 | private String ep2Str; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 68 | |
Charles Chan | 5f48a74 | 2018-10-30 18:08:59 -0700 | [diff] [blame] | 69 | private static final String L2LB_PATTERN = "^(\\d*|L2LB\\(\\d*\\))$"; |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 70 | |
| 71 | @Override |
Ray Milkey | 86ad7bb | 2018-09-27 12:32:28 -0700 | [diff] [blame] | 72 | protected void doExecute() { |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 73 | DeviceId deviceId = DeviceId.deviceId(deviceIdStr); |
| 74 | VlanId vlanId = VlanId.vlanId(vlanIdStr); |
Charles Chan | 5f48a74 | 2018-10-30 18:08:59 -0700 | [diff] [blame] | 75 | |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 76 | XconnectEndpoint ep1 = XconnectEndpoint.fromString(ep1Str); |
| 77 | XconnectEndpoint ep2 = XconnectEndpoint.fromString(ep2Str); |
| 78 | |
| 79 | Set<XconnectEndpoint> endpoints = Sets.newHashSet(ep1, ep2); |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 80 | |
| 81 | XconnectService xconnectService = get(XconnectService.class); |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 82 | xconnectService.addOrUpdateXconnect(deviceId, vlanId, endpoints); |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 83 | } |
Charles Chan | 16631de | 2019-01-02 13:46:16 -0800 | [diff] [blame] | 84 | |
| 85 | |
Charles Chan | c7b3c45 | 2018-06-19 20:31:57 -0700 | [diff] [blame] | 86 | } |