|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 3/4] tools/hotplug/Linux: Add bridge VLAN support
On Thu, May 16, 2024 at 6:56 AM Leigh Brown <leigh@xxxxxxxxxxxxx> wrote:
>
> Update add_to_bridge shell function to read the vlan parameter from
> xenstore and set the bridge VLAN configuration for the VID.
>
> Add additional helper functions to parse the vlan specification,
> which consists of one or more of the following:
>
> a) single VLAN (e.g. 10).
> b) contiguous range of VLANs (e.g. 10-15).
> c) discontiguous range with base, increment and count
> (e.g. 100+10x9 which gives VLAN IDs 100, 110, ... 190).
>
> A single VLAN can be suffixed with "p" to indicate the PVID, or
> "u" to indicate untagged. A range of VLANs can be suffixed with
> "u" to indicate untagged. A complex example would be:
>
> vlan=1p/10-15/20-25u
>
> This capability requires the iproute2 bridge command to be
> installed. An error will be generated if the vlan parameter is
> set and the bridge command is not available.
>
> Signed-off-by: Leigh Brown <leigh@xxxxxxxxxxxxx>
>
> ---
> tools/hotplug/Linux/xen-network-common.sh | 103 ++++++++++++++++++++++
> 1 file changed, 103 insertions(+)
>
> diff --git a/tools/hotplug/Linux/xen-network-common.sh
> b/tools/hotplug/Linux/xen-network-common.sh
> index 42fa704e8d..fa7615ce0f 100644
> --- a/tools/hotplug/Linux/xen-network-common.sh
> +++ b/tools/hotplug/Linux/xen-network-common.sh
> +_vif_vlan_setup() {
> + # References vlans and dev variable from the calling function
> + local vid cmd
> +
> + bridge vlan del dev "$dev" vid 1
Is vid 1 always added, so you need to remove it before customizing?
> + for vid in ${!vlans[@]} ;do
> + cmd="bridge vlan add dev '$dev' vid $vid"
> + case ${vlans[$vid]} in
> + p) cmd="$cmd pvid untagged" ;;
> + u) cmd="$cmd untagged" ;;
> + t) ;;
> + esac
> + eval "$cmd"
Sorry if I missed this last time, but `eval` shouldn't be necessary.
local args
case ${vlans[$vid]} in
p) args="pvid untagged" ;;
u) args="untagged" ;;
t) ;;
esac
bridge vlan add dev "$dev" vid "$vid" $args
args unquoted so it expands into maybe two args. You could also make
args an array and do "${args[@]}"
> + done
> +}
> +
> +_vif_vlan_membership() {
> + # The vlans, pvid and dev variables are used by sub-functions
> + local -A vlans=()
> + local -a terms=()
> + local -i i pvid=0
> + local dev=$1
> +
> + # Split the vlan specification string into its terms
> + readarray -d / -t terms <<<$2
> + for (( i=0; i<${#terms[@]}; ++i )) ;do
> + _vif_vlan_parse_term ${terms[$i]%%[[:space:]]}
Because terms is not in double quotes, wouldn't it expand out? Then
any whitespace would be dropped when calling _vif_vlan_parse_term.
Your %% only drops trailing spaces too. Maybe you want
"${terms//[[:space:]]/}" to remove all spaces?
Stylistically, you use (( )) more than I would. I'd do:
local term
for term in "${terms[@]}" ; do
_vif_vlan_parse_term "$term"
But you can keep it your way if you prefer.
Regards,
Jason
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |