Από τις πρώτες ημέρες του Asterisk η αξιόπιστη μετάδοση fax και η υποστήριξη modem ήταν μια πρόκληση. Το τεχνικό πρόβλημα που έκανε τη μετάδοση fax και την επικοινωνία μέσω modem όχι και τόσο αξιόπιστη, έχει να κάνει με τις διαφορετικές πηγές χρονισμού του υπολογιστή που τρέχει το Asterisk και των διάφορων συσκευών Zaptel (ή Dahdi).
Θεωρητικά, όλα τα ρολόγια παράγουν ένα πακέτο PCM (φωνής) κάθε 1 millisecond. Στην πραγματικότητα όμως, επειδή τα ρολόγια δεν είναι συγχρονισμένα, μία κάρτα μπορεί να παράγει ένα πακέτο PCM κάθε 1.0001 millisecond, ενώ μια άλλη μορεί να δέχεται ένα πακέτο κάθε 1.0000 millisecond (αυτές οι διαφορές υπάρχουν πάντα λόγω της φύσης των ηλεκρονικών συσκευών). Σαν αποτέλεσμα, κάθε 10.000 πακέτα (ή 10 δευτερόλεπτα) χάνεται ένα πακέτο. Αυτό το χάσιμο του πακέτου έχει αρνητική επίδραση στην ποιότητα της φωνής, αλλά στη συνομιλία μας συνήθως αγνοούμε ένα μικρό πρόβλημα ή απλά δεν το αντιλαμβανόμαστε. Στη μετάδοση δεδομένων (fax ή modem) όμως, αυτά τα μικρά προβλήματα μπορούν να αποσυγχρνίσουν τις δύο συσκευές που επικοινωνούν και να τερματίσουν τη σύνδεση.
Το Zaptel και το Dahdi δηλώνουν μια από τις κάρτες του τηλεφωνικού κέντρου σαν «sync master» και χρησιμοποιούν το ρολόι αυτής της κάρτας για χρονισμό του Asterisk. Αυτό το ρολόι είναι συνήθως ο χρονισμός που έρχεται από το τηλεφωνικό δίκτυο, όπως για παράδειγμα το ρολόι μιας σύνδεσης ISDN PRI. Αν αυτό δεν είναι διαθέσιμο, τότε χρησιμοποιείται το εσωτερικό ρολόι μιας από τις κάρτες.
Η λύση του προβλήματος στα Astribanks
Είναι προφανές ότι για να λυθεί το πρόβλημα, όλα τα ρολόγια των συσκευών Zaptel ή Dahdi πρέπει να συγχρονιστούν. Με άλλα λόγια, αν μετρήσουμε η συχνότητα των ρολογιών όλων των συσκευών για ένα μεγάλο χρονικό διάστημα πρέπει να συμπίπτει Για να μπορέσουν να συχρονιστούν όλα τα ρολόγια, όλες οι συσκευές σχεδιάζονται με ένα Phase Locked Loop (PLL). Αυτή η ηλεκτρονική συσκευή δέχεται σαν ρολόι αναφοράς τον χρονισμό από κάποια άλλη συσκευή Zaptel ή Dahdi και το συγκρίνει με το ρολόι που βρίσκεται στην ίδια τη συσκευή.
Στην πραγματικότητα, το ρολόι αναφοράς είναι ο ρυθμός μετάδοσης των πακέτων PCM από το Asterisk στο Astribank. Αν το τοπικό ρολόι είναι αργό, ο τοπικός ταλαντωτής επιταχύνεται, ενώ αν είναι γρήγορο, ο τοπικός ταλαντωτής επιβραδύνεται. Το αποτέλεσμα είναι ότι μετά από λίγα δευτερόλεπτα από τη σύνδεση του Astribank στο Asterisk, το ρολόι του Astribank συγχρονίζεταιι με το τηλεφωνικό κέντρο και μένει συγχρονισμένο για πάντα. Αν η άλλη συσκευή είναι και αυτή ένα Astribank, αυτό το Astribank χρησιμοποιείται σαν clock master για το Asterisk και ο ρυθμός των πακέτων PCM συγρονίζεται και με αυτό το Astribank. Σαν αποτέλεσμα, όλα τα Astribanks του τηλεφωνικού κέντρου είναι συγχρονισμένα.
Παρ’ όλα αυτά όμως, το τηλεφωνικό κέντρο μπορεί να περιλαμβάνει και άλλες συσκευές Zaptel ή Dahdi, οι οποίες δεν είναι Astribanks, όπως για παράδειγμα μια κάρτα OpenVox E1. Σε αυτή την περίπτωση, το Zaptel και το Dahdi χρησιμοποιούν το ρολόι του τηλεφωνικού δικτύου (ISDN PRI) σαν το ρολόι αναφοράς του τηλεφωνικού κέντρου και τα Astribanks συγχρονίζονται με αυτό.
Συμπεριφορά των PRI, BRI, FXO και FXS Modules των Astribanks
Οι ψηφιακές γραμμές (ISDN PRI και ISDN BRI) συνήθως χρονίζονται από τον τηλεπικοινωνιακό πάροχο. Αυτό σημαίναι ότι για να είναι όλες οι συσκευές συγχρονισμένες πρέπει το ρολόι αναφοράς να προέρχεται από την ψηφιακή γραμμή. Σαν αποτέλεσμα, όλο το τηλεφωνικό σύστημα (τηλεφωνικό κέντρο και Astribanks) είναι συγχρονισμένα με το ρολόι του παρόχου. Λόγω του σχεδιασμού τους, οι θύρες FXO (όλων των κατασκευαστών) είναι πολύ ευαίσθητες στις μεταβολές του χρονισμού (clock jittering) και γι’ αυτόν τον λόγο το κύκλωμα PLL του Astribank PLL απενεργοποιείται για τα FXO modules, ώστε να αποφευχθεί το jittering.
Συγρονισμός των FXO Modules
Σε ένα τηλεφωνικό κέντρο που περιλαμβάνει FXS και FXO modules, το FXO θα είναι πάντα ο synchronization master και οι θύρες FXS θα συγχρονίζονται (μέσω του κυκλώματος PLL) με το ρολόι του FXO. Αν υπάρχουν περισσότρες από 32 γραμμές FXO, μόνο οι πρώτες 32 συγχρονίζονται, γιατί οι υπόλοιπες θύρες βρίσκονται σε διαφορετικό Astribank και ο συγχρονισμός τους θα οδηγούσε σε jittering.
Ένα άλλο θέμα συγχρονισμού παρουσιάζεται όταν υπάρχου ψηφιακές γραμμές(PRI ή BRI) στο ίδιο Astribank που βρίσκεται και ένα ή περισσότερα FXO modules. Όπως αναφέρθηκε προηγουμένως, το τηλεφωνικό κέντρο παίρνει τον χρονισμό του από το τηλεπικοινωνιακό δίκτυο και οι θύρες FXO δεν μπορούν να συγχρονιστούν.
Σε ένα συγχρονισμένο Astribank το Sync LED ανάβει για για 500 milliseconds και παραμένει σβησμένο για 500 milliseconds off. Αν το Astribank δεν είναι συγχρονισμένο, το Sync LED ανάβει για 250 milliseconds, σβήνει για 250 milliseconds, ανάβει για 250 milliseconds και σβήνει για 500.
Όπως είαμε και στην αρχή, το τηλεφωνικό κέντρο λειτουργεί χωρίς πρόβλημα για κλήσεις φωνής, ακόμα και για μη συγχρονισμένες θύρες. Για κλήσεις fax και modem, οι οποίες είναι πιο ευαίσθητες, συνιστάται η χρήση συγχρονισμένων θυρών.
Ο πίνακας που ακολουθεί δείχνει του διάφορους συνδιασμούς και την υποστήριξη συγχρονισμού στα Astribanks:
Θύρες FXO |
Θύρες FXS |
Θύρες BRI |
Θύρες PRI |
Σημειώσεις |
0 | Οποιοδήποτε πλήθος | Οποιοδήποτε πλήθος | Οποιοδήποτε πλήθος | Όλες οι θύρες είναι συγχρονισμένες |
Μέχρι 32 | Οποιοδήποτε πλήθος | 0 | 0 | Όλες οι θύρες είναι συγχρονισμένες |
Περισσότερες από 32 | Οποιοδήποτε πλήθος | 0 | 0 | Οι θύρες FXO μετά την 32η δεν συγχρονίζονται |
Οποιοδήποτε πλήθος | Οποιοδήποτε πλήθος | Οποιοδήποτε πλήθος | Οποιοδήποτε πλήθος | Οι θύρες FXO δεν συγχρονίζονται |
Αν στο τηλεφωνικό κέντρο βρίσκονται και κάρτες εκτός από Asstribanks, το ρολόι των Astribanks μπορεί να συγχρονιστεί με αυτό των καρτών, με τους ακόλουθους τρόπους:
- Ελέγξτε αν το span της κάρτας σας είναι δηλωμένο σαν (MASTER) στην πρώτη γραμμή του /proc/zaptel. Αν δεν είναι, φροντίστε να είναι το πρώτο module που φορτώνεται από το Zaptel
- Δηλώστε τη πηγή συγχρονισμού των Astribanks να είναι το “zaptel”.
Αυτό γίνεται θέτοτντας το XPP_SYNC=»auto» στο /etc/dahdi/init.conf (για το Dahdi), στο /etc/sysconfig/zaptel (για Zaptel σε συστήματα Debian) ή στο /etc/default/zaptel (για Zaptel σε συστήματα on RedHat ή CentOS)