Page MenuHomePhabricator

Ciscofony
Updated 41 Days AgoPublic

Zmuszanie telefonów Cisco serii 7900 do współpracy

Temat odpalania telefonów cisco serii 7900 to temat w internecie opisany dość szeroko, lecz na raty. Jako, że ostatnio pojawiło się trochę telefonów cisco w szeroko pojętym internecie (tak allegro, na Ciebie patrzę) - postanowiłem, że nieco przybliżę część odpalania, przystosowywania i personalizowania tych wdzięcznych i bywa, że tanich telefonów.

NOTE: Na potrzeby tego artykułu przyjmijmy nieprecyzyjne definicje starych i nowych telefonów z tej serii - stare są monochromatyczne, nowe są kolorowe. Wiem, że granica leży gdzieś indziej i pewnie znajdzie się jakiś monochromatyczny telefon z nowym bebechem i nowymi potrzebami - ale nie chcę się nad tym teraz skupiać, gdyż tego przykładu nie znam i nie trafił mi na warsztat.

Najpierw TFTP

Potrzebny nam będzie jakiś działający w sieci serwer TFTP, a także wpisanie tego serwera tftp w ustawienia serwera DHCP, z któego telefony dowiedzą się jaki mają adres.
W internecie na przemian funkcjonują opisy że ma być to opcja 150 lub 66 - ja wrzucam IP tftp w oba miejsca i mam spokój. Zostawiam pole do zmiany, jeśli ktoś wyniucha, która opcja w przypadku której serii telefonów funkcjonuje - w dokumentacji TFTP obie mają tę samą funkcję.

Poradnik równie dobrze mógłbym zakończyć pisząc - ustaw sobie tail -F na logach z TFTP, podłącz telefon, zobacz o co pyta, googlaj, ściągnij, skonfiguruj, powtarzaj aż zadziała. Ale tego nie zrobię - powiem tylko, że jest to fantastyczne rozwiązanie jeśli się zawiesisz na którymś etapie. Jak to nie pomoże, pytaj @wiktor albo innych voipowych świrów (w hswaw i hswro też są)

Firmware

Co do zasady - na ogół telefonom update'uje się firmware wgrywając odpowiedni plik do głównego folderu na serwerze TFTP i puszczając na telefonie twardy reset. W sensie - najtwardszy z dostępnych..

NOTE: Twardy reset przeprowadzamy wypinając telefon z prądu, wciskając płotek/hash (#), wpinając telefon z powrotem do prądu i - w przypadku starych telefonów, na wyświetlaczu pojawi się reset key sequence detected a po puszczeniu płotka, przyciski headset/mute/speaker zaczną mrugać. Wklepujemy magiczną sekwencję, telefon zapyta czy ma usunąć wszystkie dane, co potwierdzamy cyfrą 2. W przypadku nowszych telefonów (kolorowe wyświetlacze, okolice modelu 7970) czekamy aż telefon zacznie mrugać po kolei wszystkimi przyciskami linii (po prawej od wyświetlacza) i wtedy wklepujemy magiczną sekwencję. Magiczna sekwencja to 123456789*0# czyli wszystkie przyciski numeryczne po kolei od góry licząc, od lewej do prawej

Warto zwracać na nazwy tych firmware'ów - jeśli dla danego telefonu znajdziesz takie z SIP w nazwie, to jeśli chcesz je pożenić z asteriskiem, to jest właściwy wybór. Jeśli znajdziesz SCCP, to są to wersje kompatybilne z Ciscowym SCCP managerem.

Opcje na pozyskanie ich są takie, że albo znajdują się na rosyjskich stronach, albo gdzieś komuś ktoś dawno dał je na jakimś forum. Jeśli masz problem lub ich nie masz, daj znać, znam kogoś, kto zna kogoś, kto przed wielkim wschodnim firewallem dał curlowi pobiegać

Konfiguracja

Nasz telefon łyknął świeży (lub nieświeży, ale działający) firmware, trzeba mu poustawiać conieco. Różne telefony łykają różne typy konfigów - starsze łykają coś, co przypomina yamla, ale co do zasady nim nie jest, nowsze łykają XMLe. Wrzucę oba przykłady:

Przyklad configu "starszego" telefonu
SIPAABBCCDDEEFF.cnf
phone_label: "1"
phone_prompt: "1 "

line1_shortname: "Glowny"
line1_displayname: "Glowny"

line1_name: "1"
line1_authname: "1"
line1_password: "supertajnehaslo"

line2_shortname: "Drugi"
line2_displayname: "Drugi"

line2_name: "2"
line2_authname: "2"
line2_password: "supertajnehaslotylkoinne"
Przyklad configu "nowszego" telefonu
SEPAABBCCDDEEFF.cnf.xml
<device>
  <deviceProtocol>SIP</deviceProtocol>

  <devicePool>
    <dateTimeSetting>
      <dateTemplate>D.M.Y</dateTemplate>
      <timeZone>W. Europe Standard/Daylight Time</timeZone>
      <ntps>
        <ntp>
          <name>IP ADRES NTP</name>
          <ntpMode>Unicast</ntpMode>
        </ntp>
      </ntps>
    </dateTimeSetting>

    <callManagerGroup>
      <members>
        <member priority="0">
          <callManager>
            <ports>
              <ethernetPhonePort>2000</ethernetPhonePort>
              <sipPort>5060</sipPort>
                          </ports>
            <processNodeName>IP ADRES ASTERISKA/SERWERA</processNodeName>
          </callManager>
        </member>
      </members>
    </callManagerGroup>
  </devicePool>

  <sipProfile>
    <sipProxies>
      <backupProxy></backupProxy>
      <backupProxyPort></backupProxyPort>
      <emergencyProxy></emergencyProxy>
      <emergencyProxyPort></emergencyProxyPort>
      <outboundProxy></outboundProxy>
      <outboundProxyPort></outboundProxyPort>
      <registerWithProxy>true</registerWithProxy>
    </sipProxies>

    <sipCallFeatures>
      <cnfJoinEnabled>true</cnfJoinEnabled>
      <callForwardURI>x-serviceuri-cfwdall</callForwardURI>
      <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
      <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
      <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
      <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
      <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
      <rfc2543Hold>false</rfc2543Hold>
      <callHoldRingback>2</callHoldRingback>
      <localCfwdEnable>true</localCfwdEnable>
      <semiAttendedTransfer>true</semiAttendedTransfer>
      <retainForwardInformation>true</retainForwardInformation>
      <anonymousCallBlock>2</anonymousCallBlock>
      <callerIdBlocking>2</callerIdBlocking>
      <dndControl>0</dndControl>
      <remoteCcEnable>true</remoteCcEnable>
    </sipCallFeatures>

    <sipStack>
      <sipInviteRetx>6</sipInviteRetx>
      <sipRetx>10</sipRetx>
      <timerInviteExpires>180</timerInviteExpires>
      <timerRegisterExpires>300</timerRegisterExpires>
      <timerRegisterDelta>5</timerRegisterDelta>
      <timerKeepAliveExpires>120</timerKeepAliveExpires>
      <timerSubscribeExpires>120</timerSubscribeExpires>
      <timerSubscribeDelta>5</timerSubscribeDelta>
      <timerT1>500</timerT1>
      <timerT2>4000</timerT2>
      <maxRedirects>70</maxRedirects>
      <remotePartyID>false</remotePartyID>
      <userInfo>None</userInfo>
    </sipStack>

    <autoAnswerTimer>1</autoAnswerTimer>
    <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
    <autoAnswerOverride>true</autoAnswerOverride>
    <transferOnhookEnabled>false</transferOnhookEnabled>
    <enableVad>false</enableVad>

    <preferredCodec>G711alaw</preferredCodec>
    <dtmfAvtPayload>1</dtmfAvtPayload>
    <dtmfDbLevel>3</dtmfDbLevel>
    <dtmfOutofBand>avt</dtmfOutofBand>
    <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
    <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
    <kpml>3</kpml>

    <phoneLabel>TELEFON 01</phoneLabel>
    <stutterMsgWaiting>1</stutterMsgWaiting>
    <callStats>false</callStats>
    <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
    <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>

    <sipLines>
            <line button="1" lineIndex="1">
        <featureID>9</featureID>
        <featureLabel>Glowny</featureLabel>
        <proxy>USECALLMANAGER</proxy>
                <name>1</name>
        <displayName>Glowny</displayName>
        <autoAnswer>
          <autoAnswerEnabled>0</autoAnswerEnabled>
        </autoAnswer>
        <authName>1</authName>
        <authPassword>HASLO</authPassword>
        <sharedLine>false</sharedLine>
        <messageWaitingLampPolicy>1</messageWaitingLampPolicy>
        <messagesNumber>*97</messagesNumber>
        <ringSettingIdle>4</ringSettingIdle>
        <ringSettingActive>5</ringSettingActive>
        <!--<contact>$sipUser</contact>-->
        <forwardCallInfoDisplay>
          <callerName>true</callerName>
          <callerNumber>true</callerNumber>
          <redirectedNumber>false</redirectedNumber>
          <dialedNumber>true</dialedNumber>
        </forwardCallInfoDisplay>
        <maxNumCalls>4</maxNumCalls>
        <callWaiting>1</callWaiting>
        <busyTrigger>3</busyTrigger>
      </line>
            <line button="2" lineIndex="2">
        <featureID>9</featureID>
        <featureLabel>Interkom</featureLabel>
        <proxy>USECALLMANAGER</proxy>
                <name>2</name>
        <displayName>Interkom</displayName>
        <autoAnswer>
          <autoAnswerEnabled>1</autoAnswerEnabled>
        </autoAnswer>
        <authName>2</authName>
        <authPassword>HASLO</authPassword>
        <sharedLine>false</sharedLine>
        <messageWaitingLampPolicy>1</messageWaitingLampPolicy>
        <messagesNumber>*97</messagesNumber>
        <ringSettingIdle>4</ringSettingIdle>
        <ringSettingActive>5</ringSettingActive>
        <!--<contact>$sipUser</contact>-->
        <forwardCallInfoDisplay>
          <callerName>true</callerName>
          <callerNumber>true</callerNumber>
          <redirectedNumber>false</redirectedNumber>
          <dialedNumber>true</dialedNumber>
        </forwardCallInfoDisplay>
        <maxNumCalls>4</maxNumCalls>
        <callWaiting>1</callWaiting>
        <busyTrigger>3</busyTrigger>
      </line>
          </sipLines>

    <natEnabled>false</natEnabled>
    <natAddress></natAddress>
    <voipControlPort>5060</voipControlPort>
    <startMediaPort>16348</startMediaPort>
    <stopMediaPort>20134</stopMediaPort>
    <dscpForAudio>184</dscpForAudio>
    <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
    <dialTemplate>dialplan.xml</dialTemplate>
    <softKeyFile></softKeyFile>
  </sipProfile>

  <commonProfile>
    <phonePassword></phonePassword>
    <backgroundImageAccess>true</backgroundImageAccess>
    <callLogBlfEnabled>2</callLogBlfEnabled>
  </commonProfile>


  <vendorConfig>
    <defaultWallpaperFile></defaultWallpaperFile>
    <disableSpeaker>false</disableSpeaker>
    <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>

    <g722CodecSupport>2</g722CodecSupport>
    <handsetWidebandEnable>2</handsetWidebandEnable>
    <headsetWidebandEnable>2</headsetWidebandEnable>
    <headsetWidebandUIControl>1</headsetWidebandUIControl>
    <handsetWidebandUIControl>1</handsetWidebandUIControl>

    <settingsAccess>1</settingsAccess>

    <videoCapability>0</videoCapability>
    <ciscoCamera>0</ciscoCamera>

    <webAccess>0</webAccess>
    <webProtocol>0</webProtocol>
    <sshAccess>0</sshAccess>
    <sshPort>22</sshPort>
    <loginAccess>1</loginAccess>

    <daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
    <daysBacklightNotActive>1,2,3,4,5,6,7</daysBacklightNotActive>
    <displayOnTime>00:00</displayOnTime>
    <backlightOnTime>00:00</backlightOnTime>
    <displayOnDuration>00:00</displayOnDuration>
    <backlightOnDuration>00:00</backlightOnDuration>
    <displayIdleTimeout>00:01</displayIdleTimeout>
    <backlightIdleTimeout>00:01</backlightIdleTimeout>
    <backlightIdleDuration>00:01</backlightIdleDuration>
    <displayOnWhenIncomingCall>1</displayOnWhenIncomingCall>
    <backlightOnWhenIncomingCall>1</backlightOnWhenIncomingCall>

    <recordingTone>0</recordingTone>
    <recordingToneLocalVolume>100</recordingToneLocalVolume>
    <recordingToneRemoteVolume>50</recordingToneRemoteVolume>
    <recordingToneDuration></recordingToneDuration>

    <moreKeyReversionTimer>5</moreKeyReversionTimer>
    <autoSelectLineEnable>1</autoSelectLineEnable>
    <autoCallSelect>1</autoCallSelect>
    <joinAndDirectTransferPolicy>0</joinAndDirectTransferPolicy>
    <minimumRingVolume></minimumRingVolume>
    <simplifiedNewCall>0</simplifiedNewCall>

    <peerFirmwareSharing>0</peerFirmwareSharing>
    <rtcp>1</rtcp>
    <videoRtcp>1</videoRtcp>
    <garp>0</garp>
    <bluetooth>0</bluetooth>
    <bluetoothProfile>0,1</bluetoothProfile>
    <wifi>0</wifi>
    <sdio>0</sdio>
    <usb1>1</usb1>
    <usb2>1</usb2>
    <usbClasses>0,1,2</usbClasses>

    <pcPort>0</pcPort>
    <spanToPCPort>0</spanToPCPort>
    <voiceVlanAccess>0</voiceVlanAccess>
    <forwardingDelay>0</forwardingDelay>
    <enableCdpSwPort>0</enableCdpSwPort>
    <enableCdpPcPort>0</enableCdpPcPort>
    <enableLldpSwPort>0</enableLldpSwPort>
    <enableLldpPcPort>0</enableLldpPcPort>

    <!--
    <loggingDisplay>1</loggingDisplay>
    <loadServer></loadServer>
  -->
</vendorConfig>


<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL></authenticationURL>
<directoryURL>ADRES XMLA Z KSIAZKA TELEFONICZNA</directoryURL>
<servicesURL>ADRES XMLA Z USLUGAMI</servicesURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>

<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>

<capfList>
  <capf>
    <phonePort>3804</phonePort>
  </capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>
</device>

Kiedyś postaram się rozwinąć poszczegółne opcje, większości z nich nie trzeba zmieniać, a reszta jest w miarę zrozumiała. Potknąć można się na tym, że:

  • dodając w xmlu kolejną linię, trzeba też zmienić <line button="1" lineIndex="1"> - i ustawić tam która to ma być linia / który przycisk
  • w ustawieniach linii jest zarówno nazwa linii jak i jej "login" na serwerze
  • za autoodbieranie linii odpowiada autoAnswerEnabled
Last Author
wiktor
Last Edited
Apr 16 2022, 10:11 PM

Event Timeline

wiktor changed the title from Poradnik to Ciscofony.Apr 16 2022, 10:08 PM
wiktor moved this document from Restricted Phriction Wiki Document.
wiktor added a subscriber: wiktor.