199ba4d70SRussell Blaine#!/bin/ksh 299ba4d70SRussell Blaine# 399ba4d70SRussell Blaine# CDDL HEADER START 499ba4d70SRussell Blaine# 599ba4d70SRussell Blaine# The contents of this file are subject to the terms of the 699ba4d70SRussell Blaine# Common Development and Distribution License (the "License"). 799ba4d70SRussell Blaine# You may not use this file except in compliance with the License. 899ba4d70SRussell Blaine# 999ba4d70SRussell Blaine# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 1099ba4d70SRussell Blaine# or http://www.opensolaris.org/os/licensing. 1199ba4d70SRussell Blaine# See the License for the specific language governing permissions 1299ba4d70SRussell Blaine# and limitations under the License. 1399ba4d70SRussell Blaine# 1499ba4d70SRussell Blaine# When distributing Covered Code, include this CDDL HEADER in each 1599ba4d70SRussell Blaine# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1699ba4d70SRussell Blaine# If applicable, add the following below this CDDL HEADER, with the 1799ba4d70SRussell Blaine# fields enclosed by brackets "[]" replaced with your own identifying 1899ba4d70SRussell Blaine# information: Portions Copyright [yyyy] [name of copyright owner] 1999ba4d70SRussell Blaine# 2099ba4d70SRussell Blaine# CDDL HEADER END 2199ba4d70SRussell Blaine# 2299ba4d70SRussell Blaine 23*349b53ddSStuart Maybee# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 2499ba4d70SRussell Blaine# Use is subject to license terms. 2599ba4d70SRussell Blaine 2699ba4d70SRussell Blaine# 2799ba4d70SRussell Blaine# xVM PV domU IP address reporting agent. Reports IP address back to dom0. 2899ba4d70SRussell Blaine# 2999ba4d70SRussell Blaine 3099ba4d70SRussell Blaineinterval=$1 3199ba4d70SRussell Blaine 32*349b53ddSStuart Maybeexs_ipaddr_path="guest/ipv4/0/address" 33*349b53ddSStuart Maybeexs_link_path="guest/ipv4/default-link" 3499ba4d70SRussell Blainelink="" 3599ba4d70SRussell Blaine 3699ba4d70SRussell Blaine# 3799ba4d70SRussell Blaine# Look for a valid-seeming address for the given link. Return 0 on success. 3899ba4d70SRussell Blaine# 3999ba4d70SRussell Blainelink_to_addr() 4099ba4d70SRussell Blaine{ 41*349b53ddSStuart Maybee tmp=`netstat -I $1 -in -f inet | awk '{print $4}' | grep -v Address`; 4299ba4d70SRussell Blaine if [ -z "$tmp" ] || [ "$tmp" = "0.0.0.0" ]; 4399ba4d70SRussell Blaine then 4499ba4d70SRussell Blaine addr="(none)"; 4599ba4d70SRussell Blaine return 1; 4699ba4d70SRussell Blaine fi 4799ba4d70SRussell Blaine 4899ba4d70SRussell Blaine addr=$tmp; 4999ba4d70SRussell Blaine return 0; 5099ba4d70SRussell Blaine} 5199ba4d70SRussell Blaine 5299ba4d70SRussell Blainedefault_link() 5399ba4d70SRussell Blaine{ 5499ba4d70SRussell Blaine # 5599ba4d70SRussell Blaine # Look in the store for a cached link name. 5699ba4d70SRussell Blaine # 5799ba4d70SRussell Blaine link=`/usr/lib/xen/bin/xenstore-read $xs_link_path 2>/dev/null` 5899ba4d70SRussell Blaine if [ -z "$link" ] || [ "$link" = "(none)" ] 5999ba4d70SRussell Blaine then 6099ba4d70SRussell Blaine # 6199ba4d70SRussell Blaine # If it's not there, try to determine what it is 6299ba4d70SRussell Blaine # and add it to the store. 6399ba4d70SRussell Blaine determine_default_link 6499ba4d70SRussell Blaine fi 6599ba4d70SRussell Blaine} 6699ba4d70SRussell Blaine 6799ba4d70SRussell Blaine# 6899ba4d70SRussell Blaine# Determine the default link name and update xenstore with the details. 6999ba4d70SRussell Blaine# 7099ba4d70SRussell Blainedetermine_default_link() 7199ba4d70SRussell Blaine{ 7299ba4d70SRussell Blaine link="(none)"; 7399ba4d70SRussell Blaine # 7499ba4d70SRussell Blaine # Choose the first up, non-loopback interface with a valid-looking 7599ba4d70SRussell Blaine # IP address. 7699ba4d70SRussell Blaine # 7799ba4d70SRussell Blaine dladm show-link -p -o link,state | while IFS=: read LINKNAME STATE; 7899ba4d70SRussell Blaine do 7999ba4d70SRussell Blaine if [ "$STATE" = "up" ]; 8099ba4d70SRussell Blaine then 8199ba4d70SRussell Blaine link_to_addr "$LINKNAME" 8299ba4d70SRussell Blaine if [ $? -eq 0 ]; then link=$LINKNAME; break; fi 8399ba4d70SRussell Blaine fi 8499ba4d70SRussell Blaine 8599ba4d70SRussell Blaine done 8699ba4d70SRussell Blaine 8799ba4d70SRussell Blaine /usr/lib/xen/bin/xenstore-write $xs_link_path $link 8899ba4d70SRussell Blaine} 8999ba4d70SRussell Blaine 9099ba4d70SRussell Blainewhile true; do 9199ba4d70SRussell Blaine 9299ba4d70SRussell Blaine # 9399ba4d70SRussell Blaine # Determine the default link in use by this domU. 9499ba4d70SRussell Blaine # 9599ba4d70SRussell Blaine default_link; 9699ba4d70SRussell Blaine 9799ba4d70SRussell Blaine # 9899ba4d70SRussell Blaine # If the link still has a valid-looking IP address, notify dom0 of its 9999ba4d70SRussell Blaine # address. 10099ba4d70SRussell Blaine # 10199ba4d70SRussell Blaine link_to_addr $link 10299ba4d70SRussell Blaine if [ $? -ne 0 ] 10399ba4d70SRussell Blaine then 10499ba4d70SRussell Blaine # 10599ba4d70SRussell Blaine # An address could not be determined for the currently cached 10699ba4d70SRussell Blaine # default link so determine it again in case it has changed. 10799ba4d70SRussell Blaine # We'll still sleep this iteration to rate-limit dladm calls. 10899ba4d70SRussell Blaine # 10999ba4d70SRussell Blaine determine_default_link; 11099ba4d70SRussell Blaine fi 11199ba4d70SRussell Blaine 11299ba4d70SRussell Blaine /usr/lib/xen/bin/xenstore-write $xs_ipaddr_path $addr 11399ba4d70SRussell Blaine 11499ba4d70SRussell Blaine sleep $interval 11599ba4d70SRussell Blainedone 11699ba4d70SRussell Blaine 117