1d62bc4baSyz147064 /* 2d62bc4baSyz147064 * CDDL HEADER START 3d62bc4baSyz147064 * 4d62bc4baSyz147064 * The contents of this file are subject to the terms of the 5d62bc4baSyz147064 * Common Development and Distribution License (the "License"). 6d62bc4baSyz147064 * You may not use this file except in compliance with the License. 7d62bc4baSyz147064 * 8d62bc4baSyz147064 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9d62bc4baSyz147064 * or http://www.opensolaris.org/os/licensing. 10d62bc4baSyz147064 * See the License for the specific language governing permissions 11d62bc4baSyz147064 * and limitations under the License. 12d62bc4baSyz147064 * 13d62bc4baSyz147064 * When distributing Covered Code, include this CDDL HEADER in each 14d62bc4baSyz147064 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15d62bc4baSyz147064 * If applicable, add the following below this CDDL HEADER, with the 16d62bc4baSyz147064 * fields enclosed by brackets "[]" replaced with your own identifying 17d62bc4baSyz147064 * information: Portions Copyright [yyyy] [name of copyright owner] 18d62bc4baSyz147064 * 19d62bc4baSyz147064 * CDDL HEADER END 20d62bc4baSyz147064 */ 21d62bc4baSyz147064 /* 22d62bc4baSyz147064 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23d62bc4baSyz147064 * Use is subject to license terms. 24d62bc4baSyz147064 */ 25d62bc4baSyz147064 26d62bc4baSyz147064 #include <libdlvlan.h> 27*da14cebeSEric Cheng #include <libdlvnic.h> 28d62bc4baSyz147064 29d62bc4baSyz147064 /* 30d62bc4baSyz147064 * VLAN Administration Library. 31d62bc4baSyz147064 * 32d62bc4baSyz147064 * This library is used by administration tools such as dladm(1M) to 33d62bc4baSyz147064 * configure VLANs. 34d62bc4baSyz147064 */ 35d62bc4baSyz147064 36d62bc4baSyz147064 /* 37d62bc4baSyz147064 * Returns the current attributes of the specified VLAN. 38d62bc4baSyz147064 */ 39d62bc4baSyz147064 dladm_status_t 40d62bc4baSyz147064 dladm_vlan_info(datalink_id_t vlanid, dladm_vlan_attr_t *dvap, uint32_t flags) 41d62bc4baSyz147064 { 42d62bc4baSyz147064 dladm_status_t status; 43*da14cebeSEric Cheng dladm_vnic_attr_t attr, *vnic = &attr; 44d62bc4baSyz147064 45*da14cebeSEric Cheng if ((status = dladm_vnic_info(vlanid, vnic, flags)) != 46*da14cebeSEric Cheng DLADM_STATUS_OK) 47d62bc4baSyz147064 return (status); 48d62bc4baSyz147064 49*da14cebeSEric Cheng dvap->dv_vid = vnic->va_vid; 50*da14cebeSEric Cheng dvap->dv_linkid = vnic->va_link_id; 51*da14cebeSEric Cheng dvap->dv_force = vnic->va_force; 52d62bc4baSyz147064 return (status); 53d62bc4baSyz147064 } 54d62bc4baSyz147064 55d62bc4baSyz147064 /* 56d62bc4baSyz147064 * Create a VLAN on given link. 57d62bc4baSyz147064 */ 58d62bc4baSyz147064 dladm_status_t 59d62bc4baSyz147064 dladm_vlan_create(const char *vlan, datalink_id_t linkid, uint16_t vid, 60*da14cebeSEric Cheng dladm_arg_list_t *proplist, uint32_t flags, datalink_id_t *vlan_id_out) 61d62bc4baSyz147064 { 62*da14cebeSEric Cheng return (dladm_vnic_create(vlan, linkid, VNIC_MAC_ADDR_TYPE_PRIMARY, 63*da14cebeSEric Cheng NULL, 0, NULL, 0, vid, vlan_id_out, proplist, 64*da14cebeSEric Cheng flags | DLADM_OPT_VLAN)); 65d62bc4baSyz147064 } 66d62bc4baSyz147064 67d62bc4baSyz147064 /* 68d62bc4baSyz147064 * Delete a given VLAN. 69d62bc4baSyz147064 */ 70d62bc4baSyz147064 dladm_status_t 71d62bc4baSyz147064 dladm_vlan_delete(datalink_id_t vlanid, uint32_t flags) 72d62bc4baSyz147064 { 73*da14cebeSEric Cheng return (dladm_vnic_delete(vlanid, flags | DLADM_OPT_VLAN)); 74d62bc4baSyz147064 } 75d62bc4baSyz147064 76d62bc4baSyz147064 dladm_status_t 77d62bc4baSyz147064 dladm_vlan_up(datalink_id_t linkid) 78d62bc4baSyz147064 { 79*da14cebeSEric Cheng return (dladm_vnic_up(linkid, DLADM_OPT_VLAN)); 80d62bc4baSyz147064 } 81