mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
bitkeeper revision 1.1041.5.3 (40e52bb9WJhGe1FCqVgmhmhFHxEFRg)
Merge xenbk@gandalf:/var/bk/xeno-unstable.bk into wray-m-3.hpl.hp.com:/home/mjw/repos-bk/xeno-unstable.bk
This commit is contained in:
commit
9eb67be6e7
14 files changed
+84
-52
No files matched your search
@@ -210,9 +210,6 @@ class BlkifController(controller.Controller):
|
||||
self.evtchn['port2']])
|
||||
return val
|
||||
|
||||
def lostChannel(self):
|
||||
controller.Controller.lostChannel(self)
|
||||
|
||||
def getDevices(self):
|
||||
return self.devices.values()
|
||||
|
||||
|
||||
@@ -174,9 +174,9 @@ class VirqChannel(BaseChannel):
|
||||
"""Close the channel. Calls lostChannel(self) on all its clients and
|
||||
channelClosed() on the factory.
|
||||
"""
|
||||
for c in self.clients:
|
||||
for c in self.clients[:]:
|
||||
c.lostChannel(self)
|
||||
del self.clients
|
||||
self.clients = []
|
||||
BaseChannel.close(self)
|
||||
|
||||
def registerClient(self, client):
|
||||
@@ -238,7 +238,7 @@ class Channel(BaseChannel):
|
||||
"""
|
||||
if self.closed: return
|
||||
self.closed = 1
|
||||
for d in self.devs:
|
||||
for d in self.devs[:]:
|
||||
d.lostChannel()
|
||||
self.factory.channelClosed(self)
|
||||
self.devs = []
|
||||
|
||||
@@ -93,10 +93,15 @@ class ConsoleController(controller.Controller):
|
||||
output and the connected TCP sockets to post console input.
|
||||
"""
|
||||
|
||||
STATUS_NEW = 'new'
|
||||
STATUS_CLOSED = 'closed'
|
||||
STATUS_CONNECTED = 'connected'
|
||||
STATUS_LISTENING = 'listening'
|
||||
|
||||
def __init__(self, factory, dom, console_port):
|
||||
controller.Controller.__init__(self, factory, dom)
|
||||
self.majorTypes = [ CMSG_CONSOLE ]
|
||||
self.status = "new"
|
||||
self.status = self.STATUS_NEW
|
||||
self.addr = None
|
||||
self.conn = None
|
||||
self.rbuf = xu.buffer()
|
||||
@@ -123,28 +128,31 @@ class ConsoleController(controller.Controller):
|
||||
return not (self.closed() or self.rbuf.empty())
|
||||
|
||||
def closed(self):
|
||||
return self.status == 'closed'
|
||||
return self.status == self.STATUS_CLOSED
|
||||
|
||||
def connected(self):
|
||||
return self.status == 'connected'
|
||||
return self.status == self.STATUS_CONNECTED
|
||||
|
||||
def close(self):
|
||||
try:
|
||||
self.status = "closed"
|
||||
if self.conn:
|
||||
self.conn.loseConnection()
|
||||
self.listener.stopListening()
|
||||
self.deregisterChannel()
|
||||
self.lostChannel()
|
||||
except Exception, ex:
|
||||
print 'ConsoleController>close>', ex
|
||||
raise
|
||||
"""Close the console controller.
|
||||
"""
|
||||
self.lostChannel()
|
||||
|
||||
def lostChannel(self):
|
||||
"""The channel to the domain has been lost.
|
||||
Cleanup: disconnect TCP connections and listeners, notify the controller.
|
||||
"""
|
||||
self.status = self.STATUS_CLOSED
|
||||
if self.conn:
|
||||
self.conn.loseConnection()
|
||||
self.listener.stopListening()
|
||||
controller.Controller.lostChannel(self)
|
||||
|
||||
def listen(self):
|
||||
"""Listen for TCP connections to the console port..
|
||||
"""
|
||||
if self.closed(): return
|
||||
self.status = "listening"
|
||||
self.status = self.STATUS_LISTENING
|
||||
if self.listener:
|
||||
#self.listener.startListening()
|
||||
pass
|
||||
@@ -153,15 +161,25 @@ class ConsoleController(controller.Controller):
|
||||
self.listener = reactor.listenTCP(self.console_port, f)
|
||||
|
||||
def connect(self, addr, conn):
|
||||
"""Connect a TCP connection to the console.
|
||||
Fails if closed or already connected.
|
||||
|
||||
addr peer address
|
||||
conn connection
|
||||
|
||||
returns 0 if ok, negative otherwise
|
||||
"""
|
||||
if self.closed(): return -1
|
||||
if self.connected(): return -1
|
||||
self.addr = addr
|
||||
self.conn = conn
|
||||
self.status = "connected"
|
||||
self.status = self.STATUS_CONNECTED
|
||||
self.handleOutput()
|
||||
return 0
|
||||
|
||||
def disconnect(self):
|
||||
"""Disconnect the TCP connection to the console.
|
||||
"""
|
||||
if self.conn:
|
||||
self.conn.loseConnection()
|
||||
self.addr = None
|
||||
@@ -169,15 +187,29 @@ class ConsoleController(controller.Controller):
|
||||
self.listen()
|
||||
|
||||
def requestReceived(self, msg, type, subtype):
|
||||
"""Receive console data from the console channel.
|
||||
|
||||
msg console message
|
||||
type major message type
|
||||
subtype minor message typ
|
||||
"""
|
||||
self.rbuf.write(msg.get_payload())
|
||||
self.handleOutput()
|
||||
|
||||
def responseReceived(self, msg, type, subtype):
|
||||
# Just ignore responses.
|
||||
"""Handle a response to a request written to the console channel.
|
||||
Just ignore it because the return values are not interesting.
|
||||
|
||||
msg console message
|
||||
type major message type
|
||||
subtype minor message typ
|
||||
"""
|
||||
pass
|
||||
|
||||
def produceRequests(self):
|
||||
# Send as much pending console data as there is room for.
|
||||
"""Write pending console data to the console channel.
|
||||
Writes as much to the channel as it can.
|
||||
"""
|
||||
work = 0
|
||||
while not self.wbuf.empty() and self.channel.writeReady():
|
||||
msg = xu.message(CMSG_CONSOLE, 0, 0)
|
||||
@@ -187,7 +219,12 @@ class ConsoleController(controller.Controller):
|
||||
|
||||
def handleInput(self, conn, data):
|
||||
"""Handle some external input aimed at the console.
|
||||
Called from a TCP connection (conn).
|
||||
Called from a TCP connection (conn). Ignores the input
|
||||
if the calling connection (conn) is not the one connected
|
||||
to the console (self.conn).
|
||||
|
||||
conn connection
|
||||
data input data
|
||||
"""
|
||||
if self.closed(): return -1
|
||||
if conn != self.conn: return 0
|
||||
|
||||
@@ -205,12 +205,12 @@ class Controller(CtrlMsgRcvr):
|
||||
def close(self):
|
||||
"""Close the controller.
|
||||
"""
|
||||
self.deregisterChannel()
|
||||
self.lostChannel()
|
||||
|
||||
def lostChannel(self):
|
||||
"""The controller channel has been lost.
|
||||
"""
|
||||
self.deregisterChannel()
|
||||
self.factory.instanceClosed(self)
|
||||
|
||||
class Dev:
|
||||
|
||||
@@ -198,8 +198,9 @@ class NetifController(controller.Controller):
|
||||
def randomMAC(self):
|
||||
"""Generate a random MAC address.
|
||||
|
||||
The OUI (Organisation Unique Identifier) used is AA:00:00, which
|
||||
is a currently unassigned one that used to belong to DEC.
|
||||
Uses OUI (Organizationally Unique Identifier) AA:00:00, an
|
||||
unassigned one that used to belong to DEC. The OUI list is
|
||||
available at 'standards.ieee.org'.
|
||||
|
||||
The remaining 3 fields are random, with the first bit of the first
|
||||
random field set 0.
|
||||
|
||||