|  | #!/bin/sh | 
|  | #  Copyright (C) 2010-2011, Parallels, Inc. All rights reserved. | 
|  | # | 
|  | #  This program is free software; you can redistribute it and/or modify | 
|  | #  it under the terms of the GNU General Public License as published by | 
|  | #  the Free Software Foundation; either version 2 of the License, or | 
|  | #  (at your option) any later version. | 
|  | # | 
|  | #  This program is distributed in the hope that it will be useful, | 
|  | #  but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | #  GNU General Public License for more details. | 
|  | # | 
|  | #  You should have received a copy of the GNU General Public License | 
|  | #  along with this program; if not, write to the Free Software | 
|  | #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | # | 
|  | # | 
|  | # This script is executed in the CT0 context after moving | 
|  | # PCI devices into or out of CT (vzctl set $CTID --pci_add/--pci_del). | 
|  | # It is supposed to take care about actions needed to properly | 
|  | # add/remove certain PCI devices. | 
|  | # | 
|  | # Parameters are passed in environment variables: | 
|  | #   VEID	- container ID | 
|  | #   VE_ROOT	- container root directory | 
|  | #   PCI		- list of PCI devices | 
|  | #   ADD		- boolean flag (1 - add, 0 - del) | 
|  |  | 
|  | for dev in $PCI; do | 
|  | if [ "$ADD" = 1 ]; then | 
|  | cmd='+' | 
|  | sort='' | 
|  | prefix='' | 
|  | else | 
|  | cmd='-' | 
|  | sort='-r' | 
|  | prefix=$VE_ROOT | 
|  | fi | 
|  | devdir=${prefix}/sys/bus/pci/devices/$dev/ | 
|  | cd $devdir >/dev/null|| exit 1 | 
|  |  | 
|  | find $devdir -name ve_device_add -printf '%d %p\n' | \ | 
|  | sort -n $sort | while read n f; do | 
|  | echo ${cmd}${VEID} > "$f" || exit 1 | 
|  | done | 
|  | done | 
|  | exit 0 |