From 24f179dbb9534ed7c05bee2a80f18b55443706ab Mon Sep 17 00:00:00 2001 From: Kusakabe Si Date: Mon, 5 Jul 2021 17:03:20 +0800 Subject: https://jira.fd.io/browse/GOVPP-21 Signed-off-by: Kusakabe Si Change-Id: Ib1761e3b93dae70680646ce7fdd78a1168fd0b9f --- extras/libmemif/adapter.go | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'extras/libmemif/adapter.go') diff --git a/extras/libmemif/adapter.go b/extras/libmemif/adapter.go index eb7e209..ac8a827 100644 --- a/extras/libmemif/adapter.go +++ b/extras/libmemif/adapter.go @@ -380,6 +380,7 @@ type Memif struct { // Interrupt intCh chan uint8 // memif-global interrupt channel (value = queue ID) + intErrCh chan error // triggered when interrupt error occurs queueIntCh []chan struct{} // per RX queue interrupt channel // Rx/Tx queues @@ -585,6 +586,7 @@ func CreateInterface(config *MemifConfig, callbacks *MemifCallbacks) (memif *Mem // Initialize memif-global interrupt channel. memif.intCh = make(chan uint8, 1<<6) + memif.intErrCh = make(chan error, 1<<6) // Initialize event file descriptor for stopping Rx/Tx queue polling. memif.stopQPollFd = int(C.eventfd(0, C.EFD_NONBLOCK)) @@ -667,6 +669,12 @@ func (memif *Memif) GetInterruptChan() (ch <-chan uint8 /* queue ID */) { return memif.intCh } +// GetInterruptErrorChan returns an Error channel +// which fires if there are errors occurred while read data. +func (memif *Memif) GetInterruptErrorChan() (ch <-chan error /* The error */) { + return memif.intErrCh +} + // GetQueueInterruptChan returns an empty-data channel which fires every time // there are data to read on a given queue. // It is only valid to call this function if memif is in the connected state. @@ -1022,6 +1030,7 @@ func (memif *Memif) Close() error { if err != nil { // Close memif-global interrupt channel. close(memif.intCh) + close(memif.intErrCh) // Close file descriptor stopQPollFd. C.close(C.int(memif.stopQPollFd)) } @@ -1163,6 +1172,7 @@ func pollRxQueue(memif *Memif, queueID uint8) { continue } log.WithField("err", err).Error("epoll_wait() failed") + memif.intErrCh <- err return } -- cgit 1.2.3-korg